|
Bueno, yo lo veria de la sigueiente forma:
Debes tener una tabla de vendedores, independientemente del nivel que tengan en la pirámide. y basado en esto, tienes tres alternativas:
=================================
1. Un campo que almacene el "padre" en la tabla vendedores:
create table vendedores
(
ve_codigo
ve_nombre
ve_padre
foreign key (ve_padre) references vendedores (ve_codigo)
);
Para conocer el nivel del vendedor dentro de la piramide y las personas que tiene a cargo debes entoonces crear procedimientos almacenados que los "deduzcan". (o desde Delphi, utilizando ciclos...
Para el siguiente ejemplo:
Alvaro-->Pedro-->Maria
Susana
Carlos-->Alberto
Otra Maria
La tabla vendedores quedaria asi:
1 Alvaro NULL
2 Pedro 1
3 Carlos 1
4 Maria 2
5 Susana 2
6 Alberto 3
7 Otra Maria 3
=================================
2. Una tabla que almacene los vendedores a cargo, (solo los del primer nivel)
create table vendedores
(
ve_codigo
ve_nombre
);
create table vendedores_a_cargo
(
vc_codigo_padre
vc_codigo_hijo
foreign key (ve_codigo_padre) references vendedores (ve_codigo)
foreign key (ve_codigo_hijo) references vendedores (ve_codigo)
);
De igual manera, para conocer el nivel y los vendedores a cargo en cualquiera de los niveles, debes hacer un procedimiento almacenado o procedimientos en delphi que te ayuden a calcularlos.
En el mismo ejemplo:
Alvaro-->Pedro-->Maria
Susana
Carlos-->Alberto
Otra Maria
La tabla vendedores, quedaria asi:
1 Alvaro
2 Pedro
3 Carlos
4 Maria
5 Susana
6 Alberto
7 Otra Maria
La tabla vendedores_a_cargo, quedaria asi:
1,2
1,3
2,4
2,5
3,6
3,7
=================================
3. Por último, se puede hacer una mezcla de los dos anteriores, pero en este caso, en la tabla de vendedores a cargo, se almacenan todos los vendedores, que estan relacionados a un vendedor en particular en cualquier nivel.
create table vendedores
(
ve_codigo
ve_nombre
ve_padre
foreign key (ve_padre) references vendedores (ve_codigo)
);
create table vendedores_a_cargo
(
vc_codigo_padre
vc_codigo_hijo
vc_nivel
foreign key (ve_codigo_padre) references vendedores (ve_codigo)
foreign key (ve_codigo_hijo) references vendedores (ve_codigo)
);
De esta manera, cada vez que ingreses un nuevo vendedor, y logicamente conoces su padre, debes comenzar a guardar las relaciones que este tenga con sus ramas superiores.
Continuando con el mismo ejemplo:
Alvaro-->Pedro-->Maria
Susana
Carlos-->Alberto
Otra Maria
La tabla vendedores, quedaria asi:
1 Alvaro
2 Pedro
3 Carlos
4 Maria
5 Susana
6 Alberto
7 Otra Maria
La tabla vendedores_a_cargo, quedaria asi:
1,2,1
1,3,1
1,4,2
1,5,2
1,6,2
1,7,2
2,4,1
2,5,1
3,6,1
3,7,1
Este último método, solo ahoora tiempo en las consultas que deben hacerse, para averiguar el nivel y las personas a cargo, pueden obtenerse inmediatamente los vendedores a cargo, haciendo una simple consulta. sin embargo, debe tenerse mucho cuidado, pues la infromacion aqui almacenada puede no ser coherente, y debe actualizarse cada vez que haya un cambio en uno de los niveles.
Adicionalmente, el tamaño de la tabla puede crecer exponencialmente a dependiendo de la profundidad de la piramide, que como sabemos, pude llegar a ser bastante.
Yo te recomendaria tener en cuenta, una de las dos primeras opciones.
=====================================
en cuanto a las comiciones, ya seria lo de menos, seria un modelo mas o menos normal de facturacion. Lo iportante es poder saber en un momento determinado, sobre que vendedores se debe liquidar una comisión.
Saludos
|