Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/04/2016, 11:54
NeaFan
 
Fecha de Ingreso: diciembre-2014
Ubicación: montería
Mensajes: 33
Antigüedad: 9 años, 10 meses
Puntos: 0
Busqueda Error 1005 selectivo

Hola, es posible que el título de este tema deje intrigado a más de uno, pero es que mi situación es algo así como un capricho selectivo de MySQL resaltando mi desconocimiento en alguna operación de las que realizo.

Al grano tengo estas tablas:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `mydb`.`clase` (
  2.   `idclase` INT(11) NOT NULL,
  3.   PRIMARY KEY (`idclase`))
  4. DEFAULT CHARACTER SET = utf8;
  5.  
  6.  
  7. -- -----------------------------------------------------
  8. -- Table `mydb`.`metodo`
  9. -- -----------------------------------------------------
  10. CREATE TABLE IF NOT EXISTS `mydb`.`metodo` (
  11.   `idmetodo` INT(11) NOT NULL,
  12.   `clase_idclase` INT(11) NOT NULL,
  13.   PRIMARY KEY (`idmetodo`, `clase_idclase`),
  14.   INDEX `fk_metodo_clase_idx` (`clase_idclase` ASC),
  15.   CONSTRAINT `fk_metodo_clase`
  16.     FOREIGN KEY (`clase_idclase`)
  17.     REFERENCES `mydb`.`clase` (`idclase`)
  18. DEFAULT CHARACTER SET = utf8;
  19.  
  20.  
  21. -- -----------------------------------------------------
  22. -- Table `mydb`.`parametro`
  23. -- -----------------------------------------------------
  24. CREATE TABLE IF NOT EXISTS `mydb`.`parametro` (
  25.   `idparametro` INT(11) NOT NULL,
  26.   `metodo_idmetodo` INT(11) NOT NULL,
  27.   `metodo_clase_idclase` INT(11) NOT NULL,
  28.   PRIMARY KEY (`idparametro`, `metodo_idmetodo`, `metodo_clase_idclase`),
  29.   INDEX `fk_parametro_metodo1_idx` (`metodo_idmetodo` ASC, `metodo_clase_idclase` ASC),
  30.   CONSTRAINT `fk_parametro_metodo1`
  31.     FOREIGN KEY (`metodo_idmetodo` , `metodo_clase_idclase`)
  32.     REFERENCES `mydb`.`metodo` (`idmetodo` , `clase_idclase`)
  33. DEFAULT CHARACTER SET = utf8;
¡Algo muy simple cierto! La situación es que tal cual como esta funciona, sin embargo, cuando quiero crear la misma estructura de tablas con sus relaciones exactamente así solo cambiando el nombre de la base de datos por obvias razones algo así:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `otradb`.`clase` (
  2.   `idclase` INT(11) NOT NULL,
  3.   PRIMARY KEY (`idclase`))
  4. DEFAULT CHARACTER SET = utf8;
  5.  
  6.  
  7. -- -----------------------------------------------------
  8. -- Table `otradb`.`metodo`
  9. -- -----------------------------------------------------
  10. CREATE TABLE IF NOT EXISTS `otradb`.`metodo` (
  11.   `idmetodo` INT(11) NOT NULL,
  12.   `clase_idclase` INT(11) NOT NULL,
  13.   PRIMARY KEY (`idmetodo`, `clase_idclase`),
  14.   INDEX `fk_metodo_clase_idx` (`clase_idclase` ASC),
  15.   CONSTRAINT `fk_metodo_clase`
  16.     FOREIGN KEY (`clase_idclase`)
  17.     REFERENCES `otradb`.`clase` (`idclase`)
  18. DEFAULT CHARACTER SET = utf8;
  19.  
  20.  
  21. -- -----------------------------------------------------
  22. -- Table `otradb`.`parametro`
  23. -- -----------------------------------------------------
  24. CREATE TABLE IF NOT EXISTS `otradb`.`parametro` (
  25.   `idparametro` INT(11) NOT NULL,
  26.   `metodo_idmetodo` INT(11) NOT NULL,
  27.   `metodo_clase_idclase` INT(11) NOT NULL,
  28.   PRIMARY KEY (`idparametro`, `metodo_idmetodo`, `metodo_clase_idclase`),
  29.   INDEX `fk_parametro_metodo1_idx` (`metodo_idmetodo` ASC, `metodo_clase_idclase` ASC),
  30.   CONSTRAINT `fk_parametro_metodo1`
  31.     FOREIGN KEY (`metodo_idmetodo` , `metodo_clase_idclase`)
  32.     REFERENCES `otradb`.`metodo` (`idmetodo` , `clase_idclase`)
  33. DEFAULT CHARACTER SET = utf8;

En este caso otradb es una base de datos existente, tiene sus tablas y relaciones respectivas. Dejo claro que siempre uso por defecto innoDB para todas las tablas y que manejo el mismo conjunto de caracteres utf8, además ningún nombre de tabla se repite, ni tampoco existe algún índice con nombres duplicados o semejante. Lo cierto es todo esto me parte la cabeza…

Otro punto que quizás deba aclarar es que si hago por ejemplo esto:

Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `otradb`.`parametro`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `otradb`.`parametro` (
  5.   `idparametro` INT(11) NOT NULL,
  6.   `metodo_idmetodo` INT(11) NOT NULL,
  7.   `metodo_clase_idclase` INT(11) NOT NULL,
  8.   PRIMARY KEY (`idparametro`, `metodo_idmetodo`, `metodo_clase_idclase`),
  9.   INDEX `fk_parametro_metodo1_idx` (`metodo_idmetodo` ASC, `metodo_clase_idclase` ASC)
  10. DEFAULT CHARACTER SET = utf8;
  11.  
  12. ALTER TABLE `otradb`.`parametro`
  13. ADD CONSTRAINT `fk_parametro_metodo1`
  14.   FOREIGN KEY (`metodo_idmetodo` , `metodo_clase_idclase`)
  15.   REFERENCES ` otradb `.`metodo` (`idmetodo` , `clase_idclase`)

Con eso si funciona ¿Qué es lo que pasa entonces? Ahora de seguro se preguntan porque me lió con todo esto si tengo la solución y el caso es sencillo, el primer método es como me lo genera la sincronización de modelo MySQL WORKBENCH y bueno me resulta muy cómodo solo presionar CRTL+SHIFT+Z y que se vaya actualizando mi base de datos según el modelo que voy dibujando.

Agradezco de antemano la atención prestada y recibo con afecto cualquier colaboración con respecto a este tema.