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

Relación cíclica??

Estas en el tema de Relación cíclica?? en el foro de Bases de Datos General en Foros del Web. Buenas, estoy intentando hacer un modelo de base de datos de un proyecto nuevo y me he quedado "atrapado" en una parte, os cuento la ...
  #1 (permalink)  
Antiguo 12/05/2015, 05:02
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Relación cíclica??

Buenas,

estoy intentando hacer un modelo de base de datos de un proyecto nuevo y me he quedado "atrapado" en una parte, os cuento la situación:

Tengo las entidades Proyecto, Empleado, Instalación. La idea es que un Empleado tiene uno o más Proyectos asignados, y un Proyecto indica qué Instalaciones hay que visitar. No obstante, un Empleado también tiene asignadas unas Instalaciones en concreto para cada Proyecto. Es decir, el Empleado Pepe puede tener asignada la Instalación 1 porque está en el Proyecto A, pero no obstante en el Proyecto B no tiene porque tener esa Instalación 1 asignada.

El resultado que me sale a mí es una relación cíclica (creo), ya que las 3 entidades están relacionadas entre sí, y todas las relaciones con N:M. Esto no es correcto, ¿verdad?

¿Alguien me podría echar una mano? No sé cómo hacerlo para que sea correcto, flexible y escalable

Muchas gracias!
  #2 (permalink)  
Antiguo 12/05/2015, 05:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relación cíclica??

Cita:
El resultado que me sale a mí es una relación cíclica (creo), ya que las 3 entidades están relacionadas entre sí, y todas las relaciones con N:M. Esto no es correcto, ¿verdad?
No, no es correcto. Las relaciones circulares están prohibidas por dos razones: 1) No existen, son errores de análisis, y 2) Son imposibles de implementar, porque generan en el DBMS errores de inserción por violación de FK.

Lo que debes definir mejor es el esquema de relaciones, y tener en cuenta que las Instalaciones, mas alla de que participen o no de un proyecto, son entidades base, es decir que la instalación no requiere la existencia de un proyecto para existir, y por ende es una entidad independiente.
Lo que tienes, según describes es que un Empleado está relacionado a 1:N Proyectos, y cada proyecto está relacionado a 1:N instalaciones. A su vez una misma instalación puede participar de 1:N proyectos, por lo que la relación N:N se da en dos niveles: Empleado<->Proyecto y Proyecto<->Instalacion.
Como obligatoriamente, toda relación N:M crea una tabla física, esto se resuelve con cinco tablas como mínimo:
1) Empleado
2) Proyecto
3) Instalacion
4) Empleado_Proyecto
5) Proyecto_Instalacion.

La vinculación entre instalaciones y empelados, para que quede más claro, no es directa, sino transitiva. Requiere del proyecto para vincularse, pero:
Si el empleado tiene tareas por fuera de los proyectos, que lo obligan a relacionarse con una Instalación, entonces eso implica que existe un rol , y relación entre ambos que no es parte de esta fase del modelado, y que debe analizarse por separado.
Bien podría implicar que exista otro set de tablas que de soporte a esa nueva relación entre el empleado y las instalaciones, que no es parte del postulado que planteas.

¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/05/2015, 07:50
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Relación cíclica??

Hola, gnzsoloyo, muchas gracias por contestar.
Disculpa, pero no he entendido del todo lo que me has explicado. Creo que lo que has dicho de si un empleado tiene tareas por fuera de los proyectos, no es así exactamente. Es difícil explicarlo en un foro jeje pero intentaré ser más detallado con la situación.

Reglas:
1. Un Empleado puede tener 1 o más Proyectos asignados. Y un Proyecto puede estar asignado a uno o más Empleados. (N:M)

2.Un Proyecto puede contener una o más Instalaciones. Y una Instalación puede estar en más de un Proyecto. (N:M)

3. Un Empleado tiene asignadas una o más Instalaciones para cada proyecto. Y una Instalación puede ser asignada a más de un Empleado.


Aquí un ejemplo:

EMPLEADO:
1 Juan
2 Pedro

PROYECTO:
1 ProyectoA
2 ProyectoB

INSTALACIONE:
1 EdificioA
2 EdificioB
3 EdificioC

EMPLEADO_PROYECTO:
1 Juan - ProyectoA
2 Pedro - ProyectoA

PROYECTO_INSTALACION:
1 ProyectoA - EdificioA
2 ProyectoA - EdificioB
2 ProyectoA - EdificioC
3 ProyectoB - EdificioA
4 ProyectoB - EdificioB

Juan trabaja para el ProyectoA, pero solo puede visitar las Instalaciones "EdificioA y EdificioB". El EdificioC está en su mismo Proyecto pero él no puede visitarlo. No obstante, Pedro que está en el mismo Proyecto, sí puede visitar el EdificioC (es decir todos).

Lo que no llegamos a entender, es como hacerlo para que no sea una relación cíclica.

Muchas gracias otra vez!
  #4 (permalink)  
Antiguo 12/05/2015, 09:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relación cíclica??

Cita:
3. Un Empleado tiene asignadas una o más Instalaciones para cada proyecto. Y una Instalación puede ser asignada a más de un Empleado.
Esto ya existe como relacion transitiva.
Desde el momento en que ya existe la relacion Emeplado-Proyecto, y la Proyecto-Instalacion, no se requiere ninguna otra, porque hay relacion transitiva (A depende de B y B depende de C, ergo, A depende de C a través de B).
Sólo puede requerirse una tabla adicional si hubiese empleados asignados a un proyecto que no se relacionen con TODAS las inetalaciones vinculadas al mismo proyecto.
En ese caso se requerirá una tabla detalle del tipo PROYECTO_INSTALACION_Empleado, donde se hereda la PK de la tabla PROYECTO_INSTALACION, y se le adiciona un discriminante del Empelado.

¿Se entiende?

Debe ser asi (dependiente de PROYECTO_INSTALACION), porque el emeplado asignado a la instalación dependerá del binomio (PROYECTO, INSTALACION), si hicieses depender esa tabla en forma separada de esa relacion podrías dar de alta a cuaqueir empelado con cualquier proyecto y cualquer instalacion, aunque no estuviese asignado.

Es un caso algo complejo de visualziar sin bastante práctica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/05/2015, 09:53
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Relación cíclica??

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Sólo puede requerirse una tabla adicional si hubiese empleados asignados a un proyecto que no se relacionen con TODAS las inetalaciones vinculadas al mismo proyecto.
En ese caso se requerirá una tabla detalle del tipo PROYECTO_INSTALACION_Empleado, donde se hereda la PK de la tabla PROYECTO_INSTALACION, y se le adiciona un discriminante del Empelado.
Sí!!! Ese es nuestro caso exactamente!! Pues una de las múltiples soluciones que buscamos fue esta que comentas, pero no sabíamos si era del todo correcta o no.

Muchísimas gracias por tu tiempo. Tu ayuda nos ha servido mucho!

Etiquetas: entidad
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 18:22.