Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/09/2013, 16:45
dpruebas
 
Fecha de Ingreso: agosto-2008
Mensajes: 23
Antigüedad: 15 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Error al relacionar claves foraneas en Clave compuesta

Haciendo de nuevo las pruebas, concluyo:

* Previo (tablas iniciales):
Código MySQL:
Ver original
  1. CREATE TABLE `primeratabla` (
  2. `otrocampo` varchar(10) NOT NULL,
  3. `yotro` varchar(10) NOT NULL,
  4. PRIMARY KEY (`idtabla1`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  6.  
  7. CREATE TABLE `segundatabla` (
  8. `uncampomas` varchar(10) NOT NULL,
  9. `unomas` varchar(10) NOT NULL,
  10. PRIMARY KEY (`idtabla2`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

* Funciona:
Cuando la consulta de las llaves foráneas se hace en conjunto.
Ya sea creando la tabla:
Código MySQL:
Ver original
  1. CREATE TABLE `relacion-primeratabla-segundatabla` (
  2. `idtabla1` int unsigned NOT NULL,
  3. `idtabla2` smallint(3) unsigned NOT NULL,
  4. FOREIGN KEY ( `idtabla1` ) REFERENCES `primeratabla` (`idtabla1`) ON DELETE RESTRICT ON UPDATE CASCADE,
  5. FOREIGN KEY ( `idtabla2` ) REFERENCES `segundatabla` (`idtabla2`) ON DELETE RESTRICT ON UPDATE CASCADE,
  6. PRIMARY KEY (`idtabla1`,`idtabla2`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
O modificandola:
Código MySQL:
Ver original
  1. ALTER TABLE `relacion-primeratabla-segundatabla`
  2. ADD FOREIGN KEY ( `idtabla1` ) REFERENCES `primeratabla` (`idtabla1`) ON DELETE RESTRICT ON UPDATE CASCADE,
  3. ADD FOREIGN KEY ( `idtabla2` ) REFERENCES `segundatabla` (`idtabla2`) ON DELETE RESTRICT ON UPDATE CASCADE,
  4. ADD PRIMARY KEY (`idtabla1`,`idtabla2`)

NOTA: es indiferente dónde se cree la llave primaria (en consulta aparte o en la misma).

* No funciona:
Modificando las llaves foráneas por separado:
Código MySQL:
Ver original
  1. ALTER TABLE  `relacion-primeratabla-segundatabla` ADD FOREIGN KEY ( `idtabla1` ) REFERENCES `primeratabla` (`idtabla1`) ON DELETE RESTRICT ON UPDATE CASCADE;
  2. ALTER TABLE  `relacion-primeratabla-segundatabla` ADD FOREIGN KEY ( `idtabla2` ) REFERENCES `segundatabla` (`idtabla2`) ON DELETE RESTRICT ON UPDATE CASCADE;
Por lo tanto tampoco funciona por la interfaz gráfica de phpMyAdmin ya que en la misma para estas acciones siempre usa la consulta que las modifica por separado.

¿Por qué?
Eso es lo que no sé, pero como el problema está resuelto lo marco como tal.

Cita:
gnzsoloyo, eres muy amable en responder estas preguntas en los foros (he visto muchas de tus respuestas), y estructuras las mismas de forma muy clara... pero te comento, solo si lo quieres tener en cuenta (no para discutirlo), no eres nada amable en la forma como respondes, da la impresión de que regañas, que te las sabes todas y mereces un busto, y por más útiles que sean tus respuestas, y por más conocimiento que tengas, lo agradable de un foro es que quién responde no solo siempre está dispuesto (un foro es eso, un mundo de dudas), no solo comparte todo lo que sabe, lo hace porque le gusta y en definitiva suelen ser muy amables, al menos en las primeras respuestas, sobre todo con los novatos, algo que todos somos o fuimos. A pesar de esto, no quiero prejuzgar sin conocerte, mas bien agradecerte por la rapidez con la que respondes. Espero que no te lo tomes a mal y que pena contigo haber planteado así el problema, entiendo que no fui claro.

Última edición por gnzsoloyo; 14/09/2013 a las 16:52 Razón: Usar Highlight "MySQL"