Diseño de tabla clientes/proveedores/otros

1,264 views
Skip to first unread message

ArturoPC

unread,
Feb 9, 2016, 11:49:41 AM2/9/16
to Comunidad de Visual Foxpro en Español
Estimados.

El caso es el siguiente: se tienen unas tablas de clientes, proveedores, almacenes, transportistas, etc. y se quiere unificar todos en una sola porque prácticamente tienen los mismos campos e incluso hay clientes que además son proveedores y almacenes, por ejemplo. Se necesita identificar cada tipo ya que si se le factura es un cliente, o si hay que realizarle un pago es un proveedor y en ocasiones, ni lo uno ni lo otro pero hay que identificar que se trabaja con tal o cual almacén.

La opción a la que estamos apuntando es tener diferentes campos booleanos para cada tipo, así la tabla además de los campos de rigor tendrá: idcliente , idproveedor, idalmacen, idtransportista, etc.

La pregunta del millón es, ¿valdrá la pena hacer índices por esos campos?

Adicional, si recomiendan otras formas de organizar la información, bienvenidas.

Gracias por sus recomendaciones.

Arturo PC.

Miguel Antúnez

unread,
Feb 9, 2016, 12:36:48 PM2/9/16
to publice...@googlegroups.com
Hola estimado Arturo. 
En mi caso tengo una tabla que se llama Persona el cual tiene los campos comunes en todas las tablas, como nombre, dirección, teléfono, etc,
y tengo tablas especificas por cada uno de las otras entidades, estas relacionadas a la tabla persona, para explotar y consultar la información, se crean vistas para cada una de ellas.
adjunto gráfico.
Imágenes integradas 1


--
Miguel Angel Antúnez Camones
mant...@gmail.com

Carlos Miguel FARIAS

unread,
Feb 9, 2016, 4:31:01 PM2/9/16
to Grupo Fox
Coincido con Miguel.
Haría una simplificación. El id_persona (si es posible una clave natural como CUIT o similar) la usaría como clave principal también en las demás subclases.
De esa manera, si tienes que hacer un listado de ventas, compras o transportes y solo necesitas el nombre de la persona con dicha función, haces el JOIN directo y no debes pasar por las tablas con datos específicos de cada subclase.
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe-

Víctor Hugo Espínola Domínguez

unread,
Feb 9, 2016, 5:14:50 PM2/9/16
to publice...@googlegroups.com
Hola Carlos Miguel

Astuta idea la tuya, yo estoy probando algo parecido: tengo una sola tabla de Personas y/o Empresas (Creo que estoy violando algunas reglas de normalización, pero es un sacrificio en aras de la simplificación) y los Clientes, Proveedores, Transportistas, etc... los creo como vistas. La única desventaja es que si quieres un listado de clientes o proveedores debes consultar las tablas de ventas o compras en vez del maestro.


Saludos,
Víctor.
Lambaré - Paraguay.

Antonio.xt

unread,
Feb 9, 2016, 5:52:15 PM2/9/16
to Comunidad de Visual Foxpro en Español

Victor, pero que reglas de validación podrías estar violando?

Oye, y no podrías en esa tabla maestro incluir una columna que indique el tipo de persona, ya sea cliente o proveedor, aunque el problema aqui seria para el que es cliente y proveedor al mismo tiempo, entonces otra opcion seria incluir una columna boleana por cada tipo, cliente, proveedor y transportista, y así si alguno es de mas de un tipo no habria problema, y puedes identificar cada uno sin tener que ir a la tabla de ventas o compras.

Víctor Hugo Espínola Domínguez

unread,
Feb 9, 2016, 6:23:21 PM2/9/16
to publice...@googlegroups.com
Hola Antonio

El meter en una misma bolsa entes diferentes que no comparten todos los atributos, por ejemplo una persona tiene nombres y apellidos y empresa tiene razón social (nombre), entonces al agregar una persona a la tabla la columna RazonSocial queda en nulo y viceversa cuando agregamos una empresa quedan nulos Nombres y Apellidos (a no ser que lo consideres como contacto lo cual implica que una columna representa más de un concepto)

En cuanto a identificar el rol en una columna, conozco casos en que al dar de alta a una persona no se sabe que otros roles adquirirá en el futuro. En la última empresa donde trabajé empece como proveedor (programas de mi autoría), después de un tiempo pasé a formar parte de la nómina y posteriormente actué como cliente al comprar un automóvil. Una salida podría ser y actualizando el rol de acuerdo a las transacciones efectuadas, cuando efectúa la primera compra se lo marca como cliente, a la primera venta como proveedor, etc...

Para cumplir con la regla KISS hay veces que podemos obviar otras, espero que tu tocayo no sea tan severo conmigo :-) 
 


Saludos,
Víctor.
Lambaré - Paraguay.


mapner

unread,
Feb 9, 2016, 6:28:18 PM2/9/16
to Comunidad de Visual Foxpro en Español
Tengo un enfoque similar, partiendo de la entidad Persona, que puede ser de tipo jurídica (una empresa u organización) o de tipo física (persona propiamente dicha).
Luego en solapas aparte hago el detalle de Proveedor o Cliente (datos contables, datos fiscales, datos bancarios, agrupamientos o clasificaciones, etc...).
El tema es que a veces debemos mantener sistemas Legacy o con diseños antiguos los que tienen Nº de Cliente por un lado, Nº de Proveedor por el otro, y así lo cual hace tengamos una clave primaria real (Persona) y claves secundarias de acuerdo al rol. 

ArturoPC

unread,
Feb 9, 2016, 6:52:05 PM2/9/16
to Comunidad de Visual Foxpro en Español
Hola Miguel Ángel.

Gracias por la respuesta. Creo que trabajaré a partir de tu recomendación porque se adapta a lo tenía en mente (la tabla personas) y va un poco más allá separando lo específico de cada "tipo de persona" (tablas clientes, proveedores, etc.)

Saludos.

Arturo PC.

Antonio Meza

unread,
Feb 10, 2016, 12:54:16 AM2/10/16
to Comunidad de Visual Foxpro en Español
Hola Arturo!!

Te paso una imagen de como trabajo las tablas es parecido a la de Miguel Ángel, con la diferencia que uso un catalogo para diferenciar cada entidad, es decir si es Cliente, Proveedor, Transportista, etc, 

El catalogo llamado TIPOS_PERSONAS que esta en Rojo, es el que me permite sacar los listados de Clientes, proveedores etc., igual una misma persona puede ser proveedor, transporte, etc, puede tener varios domicilios, varios contactos, varias cuentas bancarias, etc, etc.

ejemplo con datos:

Contribuyentes
id   Contribuyente      clave
1    Persona Física    F
2    Persona Moral     M

Personas
id  idContribuyente   Nombre               Apellido_paterno         Apellido_Materno
1   1                          Antonio               Meza
2   2                          Cliente Patito      sa de cv
3   2                          Transportes        sa de cv

Tipos_Personas
id   Tipo_Persona   Clave
1    Cliente              CLT
2    Proveedor         PRV
3    Transportista    TRN
4    Trabajador        TRB

Personas_Tipos
id   idPersona   idTipoPersona
25    1                 4
37    2                 1
89    3                 3
90    2                 2

Clientes
id    idPersona_Tipo    Clave
50   37                         000011 

Facturas
id   idCliente    Factura
1    50              000001

Trabajadores
id     idPersona_Tipo     Clave
100  25                           000-1111-4104-11010

Nominas
id    idTrabahador  Fecha
88  100                  09/02/2016


Como puedes ver en la tabla PERSONAS el ID = 2 corresponde a un cliente que a su vez también es proveedor, ya que así fue registrado en la tabla PERSONAS_TIPOS identificado por el campo IdPersona.

Saludos
Antonio Meza

ejemplo.PNG
Reply all
Reply to author
Forward
0 new messages