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

Relaciones 1:1

Estas en el tema de Relaciones 1:1 en el foro de Bases de Datos General en Foros del Web. Hola a todos y gracias por vuestro tiempo y ayuda. Estoy con diseño de bases de datos y me surge una duda. Tengo un enunciado ...
  #1 (permalink)  
Antiguo 06/02/2012, 12:14
 
Fecha de Ingreso: febrero-2012
Mensajes: 2
Antigüedad: 12 años, 2 meses
Puntos: 0
Relaciones 1:1

Hola a todos y gracias por vuestro tiempo y ayuda.
Estoy con diseño de bases de datos y me surge una duda. Tengo un enunciado en el que se dice claramente que a cada empresa le corresponde un único presidente y cada presidente sólo lo es de una empresa. Al hacer el modelo entidad-relación empresa y presidente son entidades relacionadas por una relación con cardinalidad 1:1. Como esa relación es 1:1 y las cardinalidades mínimas de las entidades relacionadas también son 1 la transformación a modelo relacional se hace propagando cualquiera de los identificadores, es decir, podemos propagar el DNI del presidente a la tabla empresa o el CIF de la empresa a la tabla presidente. Si, por ejemplo, elegimos la primera opción, propagar el DNI del presidente, no podrá haber empresas con presidente que no esté en la tabla presidentes pero sí podría haber empresas que tuvieran el mismo presidente. El caso es que la transformación estaría bien hecha pero la base de datos no sería cosistente 100 %. ¿Qué se podría hacer?
Gacias a todos.
  #2 (permalink)  
Antiguo 06/02/2012, 12:54
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 2 meses
Puntos: 6
Respuesta: Relaciones 1:1

Opino que tu sistema es el más óptimo.
Bueno, la relación es de 1:1 así que un presidente sólo podría serlo de 1 empresa.

El caso de los presidentes que no estuvieran en la tabla, bueno, para eso creas la base de datos. Introduces primero el nuevo presidente y luego lo asignas.

Para evitar que 1 presidente lo fuese de más de 1 empresa, creas una restricción en la tabla empresas, donde el id_presidente debe ser único, y el campo clave la id_empresa.
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #3 (permalink)  
Antiguo 06/02/2012, 13:47
 
Fecha de Ingreso: febrero-2012
Mensajes: 2
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Relaciones 1:1

Hola. Muchas gracias. Entonces, ¿es así? ¿No estoy equivocado? Lo de la restricción, ¿cómo se haría? ¿Con un disparador?
Muchas gracias de nuevo.
  #4 (permalink)  
Antiguo 07/02/2012, 08:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Relaciones 1:1

En realidad es un problema magníficamente tonto. Lo que pasa es que no estas pensando en las restricciones, sino en las relaciones. SOn dos cosas conceptualmente diferentes.
Una relación es una restricción, pero no todas las restricciones son relaciones.
Una restricción es una regla de negocio que puede ser implementada a nivel de relaciones o a nivel de dominios que puede afectar a una tabla o a varias, mientras que una relación es un vínculo entre dos tablas establecido en base a ciertas reglas. En el primer caso afecta a una o más tablas. En el segundo afecta a uno o más campos de una tabla.
¿Se entiende la diferecia?
Para que la relación sea 1:1, la FK debe contener un valor irrepetible dentro de la tabla donde ese datos es FK. En la otra ya es irrepetible, por definición de PK (una FK es una referencia a una PK de otra tabla).
Por ende, si quieres que una relación sea 1:1, lo único que tienes que hacer es declarar a esa columna como UNIQUE...
Tan simple como eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: 1-1, relaciones, tabla
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 20:17.