Diseño de Tabla para Empleados, Clientes y Proveedor.

26 views
Skip to first unread message

Alberto Cuevas

unread,
Sep 13, 2016, 4:05:33 PM9/13/16
to Agile Perú
Hola a todos, quisiera contar con su apoyo, con respecto a lo siguiente:

Siempre he trabajado el registro de Empleados, Clientes y Proveedores por separado, Contactos de Clientes y Contactos de Proveedores tambien por separado, pero en una empresa en la cual voy a implementar un software de ventas, tienen una particularidad, pues una persona puede ser Empleado, Cliente y Proveedor a la vez.

He pensado tener en una sola tabla el registro de Empleados, Clientes y Proveedores y tener tablas independientes por cada uno si se requiere.

De igual manera una sola tabla para la direccion de Empleados, Clientes y Proveedores.

Pero hay un caso mas, un Contacto de un Cliente puede ser tambien un Cliente o Proveedor.

Alguna idea de algún compañero que haya tenido un caso similar, que pueda ayudarme por favor.

Saludos.

Yonsy Solis

unread,
Sep 13, 2016, 4:27:49 PM9/13/16
to agil...@googlegroups.com
Depende de como manejes el contacto asociado.

Si te entendi bien, sera una tu tabla/modelo principal (Persona) y luego tres tablas/modelos con campos especificos que pueden ser requeridos (Empleado/Cliente/Proveedor) unidas por One-to-One a Persona (en esencia son perfiles de personas)

Los Contactos serian en esencia tambien Personas y por su perfil ya a nivel de interfaz se ve si aparece la dedicaion si son de Cliente o Proveedor (a nivel de la logica de programa se evitaria que puedan ser Empleados)

asi que si uno al ser contacto de otra persona, ya no puede ser  de otra mas, seria un Foreign Key, si puedo ser contacto de varias Personas a la vez, entonces una tabla/modelo intermendia para Many2Many.

ahora, faltaria algo mas a definir ? a nivel de BBDD o Logica de la Aplicacion ?


Yonsy Solis

Alberto Cuevas

unread,
Sep 13, 2016, 4:36:14 PM9/13/16
to agil...@googlegroups.com
Gracias por la respuesta Yonsy.

Un Contacto puede ser de N Clientes y tambien puede ser Cliente en ese caso trabajarlo en una sola tabla, no lo veo como.

Alguna idea.

Saludos.

--
Has recibido este mensaje porque estás suscrito a Grupo "Agile Perú" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a agil...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
agileperu-...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Warren Roque

unread,
Sep 13, 2016, 4:44:28 PM9/13/16
to agil...@googlegroups.com

Mi humilde opinión es usar el party datamodel http://dba.stackexchange.com/questions/105875/party-data-model-universal-data-model-example.

Saludos



Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito a Grupo "Agile Perú" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a agil...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a

Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+unsubscribe@googlegroups.com.

Yonsy Solis

unread,
Sep 13, 2016, 4:47:15 PM9/13/16
to agil...@googlegroups.com
On Tue, Sep 13, 2016 at 3:36 PM, Alberto Cuevas <betocue...@gmail.com> wrote:

Gracias por la respuesta Yonsy.

Un Contacto puede ser de N Clientes y tambien puede ser Cliente en ese caso trabajarlo en una sola tabla, no lo veo como.

Alguna idea.

Persona con FKs de Empleado/Cliente/Proveedor
Tabla intermedia m2m para Contactos solo entre Personas.

en esencia tus Personas pueden ser Empleado Cliente o Proveedor y tambien puede ser o no un Contacto. Si al final SOLO es un Contacto, no sera apuntado nunca por las otras tablas de Empleado/Cliente/Proveedor, sino solo por el m2m. 

Ya a nivel de la logica de tu aplicacion podrias verificar si el Contacto es de una persona ya existente como Empleado, Cliente o Proveedor o que el admin web lo pueda seleccionar y si no esta, crear una PERSONA como Contacto (que no aparece relacionada con las tablas/modelos Empleado/Cliente/Proveedor).


Yonsy Solis

Alberto Cuevas

unread,
Sep 13, 2016, 5:32:15 PM9/13/16
to agil...@googlegroups.com
Gracias Warren, revisare el enlace.

Saludos.

Alberto Cuevas

unread,
Sep 13, 2016, 5:33:39 PM9/13/16
to agil...@googlegroups.com
Yonsy, lo que entiendo es tener una tabla Persona en la cual se registre Empleados, Clientes y Proveedores y otra tabla PersonaContactos donde se registre solo los contactos del Cliente ?

Saludos.

Yonsy Solis

unread,
Sep 13, 2016, 5:36:32 PM9/13/16
to agil...@googlegroups.com
On Tue, Sep 13, 2016 at 4:33 PM, Alberto Cuevas <betocue...@gmail.com> wrote:

Yonsy, lo que entiendo es tener una tabla Persona en la cual se registre Empleados, Clientes y Proveedores y otra tabla PersonaContactos donde se registre solo los contactos del Cliente ?

algo asi, si tu tabla PersonaContactos es en esencia un m2m de Persona con Persona mismo.

Yonsy Solis

Alberto Cuevas

unread,
Sep 13, 2016, 5:40:12 PM9/13/16
to agil...@googlegroups.com
Entendido. Gracias Yonsy.

Saludos.

--

Victor Moreno

unread,
Sep 13, 2016, 6:26:33 PM9/13/16
to agil...@googlegroups.com
Hola Beto,

En mi caso lo manejo de la forma que planteas, con una sola tabla llamada "Empresas"

Para el caso del manejo de contactos te sugiero una tabla adicional que almacene "ContactoEmpresa", 
donde debes guardas el idEmpresa y el IdContacto(Empresa), de esta manera tendrás asociados dichos Id.

En mi caso manejo también "CorporaciónEmpresa", donde guardo el IdEmpresa y IdCorporaciòn(Empresa).

Espero te aya podido ayudar,

Cualquier consulta me puedes escribir.

Saludos,


Victor F. Moreno.




From: betocue...@gmail.com
Date: Tue, 13 Sep 2016 20:05:20 +0000
Subject: [agileperu] Diseño de Tabla para Empleados, Clientes y Proveedor.
To: agil...@googlegroups.com

Alberto Cuevas

unread,
Sep 14, 2016, 4:04:09 PM9/14/16
to agil...@googlegroups.com
Victor gracias por responder, bueno tengo una 1ra versión del modelo que deseo implementar:

Modelo 1:

Crear las tablas:

Tipo_Persona
Persona
Tipo_Relacion
Persona_Relacion

Tipo_Persona
ID_TIPO_PERS  (PK)
NOM_TIPO_PERS

Persona
ID_PERS           (PK)
ID_TIPO_PERS  (PK)
NOM_PERS
APPAT_PERS
APMAT_PERS
TIPO_DOCUM
NUM_DOCUM

Tipo_Relacion
ID_TIPO_RELA (PK)
NOM_TIPO_RELA

Persona_Relacion
ID_RELA            (PK)
ID_PERS          
ID_PERS_RELA
ID_TIPO_RELA (FK)

Modelo 2:

Crear las tablas:

Persona
Tipo_Relacion
Persona_Relacion

Persona
ID_PERS           (PK)
ES_PROVEE     Campo Char(1) si es 1 es Proveedor
ES_CLIENTE     Campo Char(1) si es 1 es Cliente
ES_EMPLEA     Campo Char(1) si es 1 es Empleado
NOM_PERS
APPAT_PERS
APMAT_PERS
TIPO_DOCUM
NUM_DOCUM

Tipo_Relacion
ID_TIPO_RELA (PK)
NOM_TIPO_RELA

Persona_Relacion
ID_RELA            (PK)
ID_PERS          
ID_PERS_RELA
ID_TIPO_RELA (FK)

El Modelo 2, en la tabla Persona tiene los campos ES_PROVEE, ES_CLIENTE, ES_EMPLEA, puede ser una buena salida de momento, pero si existe la necesidad de otro tipo o tipos tendria que crear nuevos campos ES_NUEVOTIPO1, ES_NUEVOTIPO2, etc..

Saludos.

Victor Moreno

unread,
Sep 14, 2016, 4:43:17 PM9/14/16
to agil...@googlegroups.com
Estimado Beto,

El modelo 2 es el indicado, dependerá también del análisis de información que realices para poder determinar 
que cambios y que probabilidad de ocurrencia exista a futuro y si los tienes identificarlos podrías ya considerarlos, 
así mismo debes contemplar el impacto que tendrán en toda tu arquitectura, así podrás minimizar las posibilidades 
de rehacer o generar grandes cambios en tu aplicación. 

Saludos,

Victor.



From: betocue...@gmail.com
Date: Wed, 14 Sep 2016 20:03:56 +0000
Subject: Re: [agileperu] Diseño de Tabla para Empleados, Clientes y Proveedor.

Alberto Cuevas

unread,
Sep 14, 2016, 4:51:36 PM9/14/16
to agil...@googlegroups.com
Muchas gracias por el apoyo Victor.

Saludos.

Victor Moreno

unread,
Sep 14, 2016, 7:10:22 PM9/14/16
to agil...@googlegroups.com
De nada, cualquier consulta estamos para ayudar.

Saludos.

Victor.


From: betocue...@gmail.com
Date: Wed, 14 Sep 2016 20:51:23 +0000

Carlos Peix

unread,
Sep 18, 2016, 1:23:59 AM9/18/16
to agileperu
Hola Alberto,

Una de las formas de resolver exactamente lo que mencionas es un diseño basado en roles donde existen "cosas" (personas, lugares, etc) que desempeñan roles (cliente, proveedor, vendedor).

Esta búsqueda en Google te da algunos resultados.

Yo he usado estos patrones en varios diseños, recomiendo pensarlo desde los objetos, no desde las tablas de base de datos.

----------------------------------
Carlos Peix

--
Has recibido este mensaje porque estás suscrito a Grupo "Agile Perú" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a agil...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a

Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+unsubscribe@googlegroups.com.

Alberto Cuevas

unread,
Sep 19, 2016, 2:53:35 PM9/19/16
to agileperu
Carlos muchas gracias por tu apoyo, ahora vere el enlace.

Saludos.

El dom., 18 sept. 2016 a las 0:23, Carlos Peix (<carlo...@gmail.com>) escribió:
Hola Alberto,

Una de las formas de resolver exactamente lo que mencionas es un diseño basado en roles donde existen "cosas" (personas, lugares, etc) que desempeñan roles (cliente, proveedor, vendedor).

Esta búsqueda en Google te da algunos resultados.

Yo he usado estos patrones en varios diseños, recomiendo pensarlo desde los objetos, no desde las tablas de base de datos.

----------------------------------
Carlos Peix

2016-09-13 17:05 GMT-03:00 Alberto Cuevas <betocue...@gmail.com>:
Hola a todos, quisiera contar con su apoyo, con respecto a lo siguiente:

Siempre he trabajado el registro de Empleados, Clientes y Proveedores por separado, Contactos de Clientes y Contactos de Proveedores tambien por separado, pero en una empresa en la cual voy a implementar un software de ventas, tienen una particularidad, pues una persona puede ser Empleado, Cliente y Proveedor a la vez.

He pensado tener en una sola tabla el registro de Empleados, Clientes y Proveedores y tener tablas independientes por cada uno si se requiere.

De igual manera una sola tabla para la direccion de Empleados, Clientes y Proveedores.

Pero hay un caso mas, un Contacto de un Cliente puede ser tambien un Cliente o Proveedor.

Alguna idea de algún compañero que haya tenido un caso similar, que pueda ayudarme por favor.

Saludos.

--
Has recibido este mensaje porque estás suscrito a Grupo "Agile Perú" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a agil...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a

Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito a Grupo "Agile Perú" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a agil...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a

Para obtener más opciones, visita este grupo en
http://groups.google.com.pe/group/agileperu?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "Agile Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a agileperu+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages