Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Modelar relacion 1:1

Estas en el tema de Modelar relacion 1:1 en el foro de Bases de Datos General en Foros del Web. Hola, buenos dias. Estoy intentando modelar una relación 1:1 , en este caso les dejo un ejemplo muy basico y simple, donde un empleado puede ...
  #1 (permalink)  
Antiguo 29/01/2019, 17:13
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Modelar relacion 1:1

Hola, buenos dias.

Estoy intentando modelar una relación 1:1 , en este caso les dejo un ejemplo muy basico y simple, donde un empleado puede tener solo un dato de contacto, y ese dato de contacto puede pertenecer solo a ese empleado. No quiero agregar todo en la tabla empleado.
Se me ocurren dos opciones:

1) Las dos tablas de arriba, donde empleado tiene una campo con clave foranea "id_contacto", y es "unique", que apunta a la tabla "Contacto" donde se almacenan sus datos.

2) Las dos tablas de abajo, donde empleado y contacto tienen la misma clave primaria, por ejemplo el empleado que tenga id_empleado = 1, le correspondera la tabla contacto que tenga id_empleado = 1


¿Es alguna de estas formas la correcta? Si no lo es, ¿Cual seria?



Saludos
__________________
Si quieres cambio verdadero, pues camina distinto...
  #2 (permalink)  
Antiguo 30/01/2019, 07:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Modelar relacion 1:1

La 1era opcion es la correcta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/01/2019, 08:30
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Respuesta: Modelar relacion 1:1

Cita:
Iniciado por Libras Ver Mensaje
La 1era opcion es la correcta
Hola Libras, buenos días.

Muchas gracias por tu respuesta.

Saludos
__________________
Si quieres cambio verdadero, pues camina distinto...
  #4 (permalink)  
Antiguo 30/01/2019, 13:17
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Modelar relacion 1:1

aunque estructuralmente la primera opcion es la mejor, hablando de rendimiento, la segunda seria, y eso todavia se podria mejorar cuando se habla relacion 1:1 , se supone que ambos tienen el ID unico

yo lo dejaria de la siguiente forma
Código:
[empleado]
*id
*nombre
--------------------
[contacto]
*id
*nombres
*apellidos
*calle
*etc........................
ya que al hacer un inner JOIN etc

puedes hacer la relacion con "empleado.id=contacto.id" y asi evitar el redundar
"empleado.empleado_id=contacto.contacto_id, ojo que tienes que tomar en cuenta que en una RELACION 1:1 , ambas claves deben ser Identicas, en todo aspecto, excepto en el AutoIncremental

aunque yo te sugeriria que en lugar de un ID numerico, uses los Codigos DNI de cada persona, ya que supuestamente son UNICOS, y podrias usarlos para otros Documentos, sin tener que Recurrir a un JOIN
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #5 (permalink)  
Antiguo 30/01/2019, 15:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Modelar relacion 1:1

y porque tiene mejor rendimiento la segunda opcion?

puedes hacer la relacion con "empleado.id=contacto.id" y asi evitar el redundar
"empleado.empleado_id=contacto.contacto_id


Porque redundar, que no es lo mismo en ambos casos?(con menos letras solamente)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 30/01/2019, 21:37
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Modelar relacion 1:1

Cita:
Iniciado por Libras Ver Mensaje
y porque tiene mejor rendimiento la segunda opcion?

puedes hacer la relacion con "empleado.id=contacto.id" y asi evitar el redundar
"empleado.empleado_id=contacto.contacto_id


Porque redundar, que no es lo mismo en ambos casos?(con menos letras solamente)
bueno yo digo que es redundar por que cuando trabaja en empresas financieras las tablas de ORACLE y los SP que contenian era ENORMES, y note que al corregir

si bien ponen CONTACTOS.contactos_id, solian confundirse la mayoria y al tratar con SP de mas de 200 lineas , los programadores suelen a fallar CONTACTOS.contacto_id crear si tan solo hubiesen sido mas simples, en nombrar el ID y otras columnas de forma sencilla se hubiese evitado un gasto de 2 meses en auditar todas las tablas
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #7 (permalink)  
Antiguo 31/01/2019, 11:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Modelar relacion 1:1

A pero tu hablas a nivel programacion, eso es otra cosa, a nivel base de datos y tomando en cuenta que son tablas relacionales la mejor forma es la 1era, y la redundancia que mencionas no existe, ahi seria manejar un naming convention para todas tus tablas y columnas, que es esto, que existan reglas para nombrar las columnas y asi evitar ese tipo de errores, que son errores en la capa 8 ;) jejejeje
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: relaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:33.