Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/11/2015, 10:04
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Duda sobre relaciones 1-1, n-1, n-n, 1-n

Cita:
Me surgen dos dudas ahora en la relacion N:N con la tabla empleado_id y coche_id que no se pueden repetir, es decir, no puedo tener repetido un usuario con un mismo coche varias veces. Necesitaría restringir la tabla para que no permitiera añadir varias veces a un empleado con mismo coche no ?.
Eso se restringe en forma automática cuando declaras la PK como compuesta por las dos FK... Es decir, supongamos: (empleado_id, coche_id).
Por definición, una PK es UNICA...

Cita:
Respecto al ejemplo 1-1 creo haber entendido que es necesario tener 2 tablas aparte de la dependencia donde tendría que pasar el id del coche al empleado, así si borro el empleado el coche sigue existiendo en su tabla. ¿ Es esto a lo que te referías con la dependencia ?, mientras que si lo hiciera al revés al borrar un empleado se me quedaría la tabla coches con un id de ese empleado que no pertenecería a nadie ya que la acabo de borrar. ¿ Es esto así ?.
Cuando se habla de "dependencia" en base de datos, estamos hablando a que existe una dependencia funcional entre dos entidades. es decir, la EXISTENCIA de una entidad depende de la existencia de otra.
El caso más ejemplificador es el de las cargas sociales de un empleado. Los registros correspondientes a las cargas sociales (hijos, conyuges, etc), sólo existen en su tabla , si existe el empleado. De lo contrario no existen. ESO es dependencia funcional.
Si los empleados de la empresa pueden existir como tales, aunque no se les asigne un vehículo, y los vehículos existen aunque no tengan empelados asignados, entonces NO EXISTE dependencia.
Ene se caso lo que existe es una RELACION entre ambas entidades que se representa por medio de una TABLA que la administra. Eso es un concepto diferente en el análisis del sistema.

Ahora bien, suponiendo que Empleado y Coche son tablas base (sus entidades representadas existen aún si no se las relaciona), hay un vínculo que podemos denominar "Tiene _asignado_un_coche", y esa relación determina la existencia de la tabla "Asignado_A", la cual a su vez sólo posee dos campos principales: Los de la PK que te mencionaba antes
Cita:
TIENE_ASIGNADO(empelado_id, coche_id).
En ese diseño, ni Empelado ni Coche requieren la fk de la otra tabla, ya que la relación la hace la tercera tabla.
Ahora bien, ¿como haces en ese diseño para que un mismo vehículo y un mismo empelado aparezcan una sola vez?
Fácil: declaras UNIQUE a cada campo...
Código MySQL:
Ver original
  1. empleado_id INT NOT NULL
  2. coche_id INT NOT NULL,
  3. PRIMARY KEY(empelado_id, coche_id),
  4. CONSTRAINT  empleado_fk FOREIGN KEY(empleado_id) REFERENCES EMPLEADO(empelado_id),
  5. CONSTRAINT  coche_fk FOREIGN KEY(coche_id) REFERENCES COCHE(coche_id));
  6.  
  7. CREATE UNIQUE INDEX asigna_empelado_uk ON tiene_asignado(emeplado_id);
  8. CREATE UNIQUE INDEX asigna_coche_uk ON tiene_asignado(coche_id);

ATENCION: Lo estoy escribiendo de memoria, este breve script puede contener errores porque no estoy mirando el manual de referencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)