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

[SOLUCIONADO] No puedo crear un FK

Estas en el tema de No puedo crear un FK en el foro de Mysql en Foros del Web. Hola: Estoy actualizando mi modelo en Workbench agregándole FK a mis tablas, pero para una de ellas me sale que no es posible porque le ...
  #1 (permalink)  
Antiguo 06/05/2015, 07:55
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 17 años, 6 meses
Puntos: 6
Pregunta No puedo crear un FK

Hola:

Estoy actualizando mi modelo en Workbench agregándole FK a mis tablas, pero para una de ellas me sale que no es posible porque le falta un índice a la tabla referenciada.

Aquí coloco los códigos de las tablas, la tabla "presupuestos" referencia a "clientes" y final coloco el error que me salta cuando trato de sincronizar mi modelo con la tabla física.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `bd_macroimagen`.`clientes` (
  2.   `FE_CREA` DATETIME NULL,
  3.   `FE_MODI` DATETIME NULL,
  4.   `US_CREA` VARCHAR(45) NULL,
  5.   `US_MODI` VARCHAR(45) NULL,
  6.   `IP` VARCHAR(100) NULL,
  7.   `RUC` VARCHAR(11) NOT NULL,
  8.   `GrupoCliente` VARCHAR(45) NOT NULL,
  9.   `RazonSocial` VARCHAR(100) NOT NULL,
  10.   `Direccion` VARCHAR(200) NOT NULL,
  11.   `DireccionGuia` VARCHAR(200) NOT NULL,
  12.   PRIMARY KEY (`RUC`))
  13. DEFAULT CHARACTER SET = latin1

Código MySQL:
Ver original
  1. CREATE TABLE `presupuestos` (
  2.   `FE_CREA` datetime DEFAULT NULL,
  3.   `FE_MODI` datetime DEFAULT NULL,
  4.   `US_CREA` varchar(45) DEFAULT NULL,
  5.   `US_MODI` varchar(45) DEFAULT NULL,
  6.   `IP` varchar(100) DEFAULT NULL,
  7.   `id` varchar(13) NOT NULL,
  8.   `CuentaUsuario` varchar(45) DEFAULT NULL,
  9.   `GrupoCliente` varchar(45) NOT NULL COMMENT 'El alias del cliente se copia de la tabla de clientes. El alias será parte del código de cotización.',
  10.   `Anio` int(10) unsigned NOT NULL,
  11.   `Numero` int(11) NOT NULL COMMENT 'El código va con el alias del cliente tomada en este mismo registro.',
  12.   `Version` int(11) NOT NULL,
  13.   `RUCCliente` varchar(11) NOT NULL,
  14.   `NombreContacto` varchar(250) DEFAULT NULL,
  15.   `Referencia` varchar(200) NOT NULL,
  16.   `Estado` enum('en_edicion','por_revisar','por_respuesta_del_cliente','en_produccion','terminado','anulado','interno','por_documentacion') NOT NULL,
  17.   `DocumentoPendiente` varchar(100) DEFAULT NULL,
  18.   `IGV` int(11) NOT NULL,
  19.   `Observaciones` text NOT NULL,
  20.   `FechaProgramadaEntrega` datetime DEFAULT NULL,
  21.   `FechaEntregado` datetime DEFAULT NULL,
  22.   PRIMARY KEY (`id`),
  23.   KEY `fk_table1_usuarios1_idx` (`CuentaUsuario`),
  24.   KEY `fk_presupuestos_clientes1_idx` (`RUCCliente`),
  25.   CONSTRAINT `fk_table1_usuarios1` FOREIGN KEY (`CuentaUsuario`) REFERENCES `usuarios` (`Cuenta`) ON DELETE NO ACTION ON UPDATE CASCADE

Código MySQL:
Ver original
  1. Executing SQL script in server
  2. ERROR: Error 1822: Failed to add the foreign key constaint. Missing index for constraint 'fk_presupuestos_clientes1' in the referenced table 'clientes'
  3. SQL Code:
  4.         ALTER TABLE `bd_macroimagen`.`presupuestos`
  5.         ADD CONSTRAINT `fk_presupuestos_clientes1`
  6.           FOREIGN KEY (`RUCCliente`)
  7.           REFERENCES `bd_macroimagen`.`clientes` (`RUC`)
  8.           ON DELETE NO ACTION
  9.           ON UPDATE NO ACTION
  10.  
  11. SQL script execution finished: statements: 5 succeeded, 1 failed
  12.  
  13. Fetching back view definitions in final form.
  14. Nothing to fetch

Espero me ayuden a resolverlo. Muchas gracias.

Saludos.

Última edición por gnzsoloyo; 06/05/2015 a las 08:02
  #2 (permalink)  
Antiguo 06/05/2015, 08:04
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: No puedo crear un FK

Tienes diferentes CHARSET en cada tabla, LATIN1 en una y UTF8 en la otra.

Tienen que ser del mismo CHARSET e incluso COLLATION (de estar declarada), o de lo contrario no pueden crearse. Las FK debe ser exactamente iguales en todo a la PK de la tabla referida.
__________________
¿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 06/05/2015, 14:45
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: No puedo crear un FK

¡GRACIAS! No me había fijado en el Charset, sucede que estuve agarrando tablas de otros modelos. Estaré más atento la próxima. Saludos.

Etiquetas: bd, fecha, registro, sql, tabla
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 16:51.