Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/01/2011, 20:23
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: Llaves foráneas muchos a muchos (ya no entiendo) Urgente

Cita:
Iniciado por ramonw Ver Mensaje
Hola, me parece que no podés tener 2 PRIMARY KEY
Código PHP:
Ver original
  1. PRIMARY KEY (`tareas_id_tarea`, `ordenes_trabajo_id_ot`) ,

Además las columnas involucradas en la clave foránea y en la clave referenciada deben tener iguales tipos de datos, fijate esto en la otra tabla.
Eso no son dos PK, sino una PK de dos campos...

Respecto al problema, la cosa sería:
- La tabla Trabajos es la representación N:M entre Tareas y Ordenes_Trabajo.
- En ese contexto, corresponde que la PK de la tabla Trabajos esté compuesta por la PK de las otras dos tablas.
- Eso implica que cada valor de ID de la tabla Ordenes_Trabajo se relaciona una sola vez con uno o más de un registro de la tabla Tareas, pero sólo con un ID por vez.
- De eso se infiere que en una Orden de Trabajo, cada tarea sólo puede aparecer una sola vez, y nada más.
- En ese contexto, el diseño de la tabla:
Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `sav_muller`.`trabajos` (
  2.   `tareas_id_tarea` INT NOT NULL ,
  3.   `ordenes_trabajo_id_ot` INT NOT NULL ,
  4.   PRIMARY KEY (`tareas_id_tarea`, `ordenes_trabajo_id_ot`) ,
  5.   INDEX `fk_trabajos_tareas1` (`tareas_id_tarea` ASC) ,
  6.   INDEX `fk_trabajos_ordenes_trabajo1` (`ordenes_trabajo_id_ot` ASC) ,
  7.   CONSTRAINT `fk_trabajos_tareas1`
  8.     FOREIGN KEY (`tareas_id_tarea` )
  9.     REFERENCES `sav_muller`.`tareas` (`id_tarea` )
  10.   CONSTRAINT `fk_trabajos_ordenes_trabajo1`
  11.     FOREIGN KEY (`ordenes_trabajo_id_ot` )
  12.     REFERENCES `sav_muller`.`ordenes_trabajo` (`id_ot` )
es completamente correcto, así que lo que estás tratando de meter en la tabla Trabajos es dos veces la misma tarea con la misma orden de trabajo y eso no es razonable.

Así pues, en principio lo que parece es que lo que estás haciendo es mal las inserciones, y no el diseño de la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)