MySQL - [Consulta] Diseño base de datos.

 
Vista:
Imágen de perfil de Nicolás Ignacio
Val: 32
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Nicolás Ignacio (21 intervenciones) el 19/03/2017 20:27:17
Buenas estimados. Consulta para los que ya hayan pasado por un diseño similar. Seguro que la mayoría

Que tan aconsejable es tener separado en otras tablas los domicilios y teléfonos de la tabla por ejemplo persona_fisica?

Lo he visto en algunos erp. Mi idea es que puedan tener entre 1 o más domicilios o teléfonos la personas. Pero bien podría tener dos campos de dirección 1, dirección 2. Uno particular y otro laboral o de entrega de mercadería.

Quiero saber en cuanto a normalización qué es mejor...La dificultad es que se complica mantener si hago una relación uno a muchos de persona a domicilio o una relación muchos a muchos, creando una tabla intermedia...

Bueno espero se entienda saludos y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 42
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Alejandro (11 intervenciones) el 20/03/2017 00:20:25
Hola Nicolas, en lo personal yo suelo crear dos tablas distintas en el caso de tener atributos multivaluados, como pueden ser el teléfono y el domicilio de una persona. Esto es lo que se conoce como normalización 1FN.

https://es.wikipedia.org/wiki/Primera_forma_normal.

Mi recomendación si es crear tablas separadas.

Ejemplo:

TABLA USUARIO

id_user (PK)
nombre
apellido

TABLA USUARIO_TELEFONO
id_user
num_tel
(num_tel id_user) PK
id_user FK -> USUARIO (id_user)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Nicolás Ignacio
Val: 32
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Nicolás Ignacio (21 intervenciones) el 20/03/2017 01:50:43
Hola Alejandro! Muchas gracias por tu respuesta. Si es lo que pensaba, mi idea era hacer lo mismo. De hecho hasta establecer una relación muchos a muchos donde varias personas puedan tener el mismo domicilio y así evitar duplicar. Por ejemplo, tengo un Padrón de Afiliados donde un beneficiario titular, posee un domicilio, y su grupo familiar, son beneficiarios independientes pero poseen el mismo domicilio. Ahí se cumpliría una relación de muchos a muchos, donde crearía una tabla intermedia afiliado_domicilio y las claves foráneas de cada tabla.

Lo mismo sucede con el teléfono, ya que un grupo familiar de 5 o más personas tienen el mismo número....

Lo que me parece malo de este diseño es que es difícil a la hora de editar los datos de los mismos, si quisieran modificar el domicilio del titular....además luego en el código de la aplicación también es diferente para cargar, ya que primero habría que consultar si el domicilio existe en el sistema y asociarlo....no se.

Quizá solo dejo una relación de uno a muchos, qué opinas?

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 42
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Alejandro (11 intervenciones) el 21/03/2017 01:00:24
Hola, si me recomendación es solo crear una relación de uno a muchos como tu mencionas.
Donde cuentes con una tabla principal llámese USER con un id_user como PK y otra USER_ADDRESS con PK (id_user, address) y id_user como FK de USER.
Y desde la aplicación solo necesitas contar con el id_user ( o como se llame el campo en la bd) y buscar por este en la tabla de teléfonos o domicilios.
De esta manera no te complicas con tanta vuelta.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Nicolás Ignacio
Val: 32
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Nicolás Ignacio (21 intervenciones) el 21/03/2017 01:57:16
Muchas gracias por tu respuesta !

Entiendo lo que me sugieres, pero que hago si un grupo de personas tiene el mismo teléfono o el mismo domicilio? No estoy repitiendo muchas veces los mismos datos?

Además mencionas una clave primaria compuesta no es así?

Y si hago así la tabla? :

user:

Id (pk)
Nombres
Apellidos
Edad
Telefono_id (fk)

telefono:

Id (pk)
Numero
Tipo

No es un diseño viable? Donde se relacione el teléfono con el usuario a través de su id?

Bueno gracias por la paciencia. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 42
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

[Consulta] Diseño base de datos.

Publicado por Alejandro (11 intervenciones) el 22/03/2017 03:43:06
Hola Nicolás, el problema con el planteamiento que propones es que la relación en este caso 1 a N (siendo que un usuario puede contar con uno o más teléfonos/domicilios) el diseño seria como te mencione anteriormente con la clave compuesta en la tabla telefono/ domicilio.

Te comparto un pdf que explica el tema de normalización http://www.carambula.net/wp-content/uploads/2010/06/2010_SBD_4_Normalizacion.pdf.

Respecto a la primera pregunta, creo que si realizas el diseño anterior en tu base de datos, este control lo puedes hacer desde la misma aplicación, comprobando el parentesco o relación entre las personas y en base a este determinar el registro.
Pero también, cabe la posibilidad de que puede que en un principio ese grupo de personas compartan el mismo teléfono/domicilio pero quizás en alguno momento esto cambie y por lo tanto el diseño de tu base no sería compatible, al querer realizar este registro. Seguramente se repetirán datos, pero a la larga será más fácil aplicar cambios.

Un Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar