Buenas a todos.
Estoy creando una base de datos desde cero y he podido generar todas las Fk correctamente a excepción de la tabla even_cal_emp (ver mas abajo el código) que me salta el error 1005.
Necesito ayuda, esoy volviendome loco y el código está correcto.
Nota: Estoy usando InnoDB
Código PHP:
--
-- primero creo la tabla maestra
--
CREATE TABLE `grupo_empresas` (
`GRE_ID` int(10) NOT NULL auto_increment,
`GRE_CODIGO` int(5) NOT NULL,
`GRE_USUARIO_WEB` int(10) NOT NULL default '0',
PRIMARY KEY (`GRE_CODIGO`,`GRE_USUARIO_WEB`),
UNIQUE KEY `GRE_ID_UNIQUE` (`GRE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=20;
--
-- luego su detalle
--
CREATE TABLE `empresas` (
`EMP_ID` int(10) NOT NULL auto_increment COMMENT 'Identificador de la empresa',
`EMP_CODIGO` int(5) NOT NULL default '0' COMMENT 'Codigo de la empresa',
`EMP_COD_GRUPO_EMP` int(5) NOT NULL default '0',
`GRE_USUARIO_WEB` int(10) NOT NULL default '0',
PRIMARY KEY (`EMP_CODIGO`,`EMP_COD_GRUPO_EMP`,`GRE_USUARIO_WEB`),
UNIQUE KEY `EMP_ID_UNIQUE` (`EMP_ID`),
KEY `INDICE` (`EMP_ID`),
KEY `FK_EMP_GRU` (`EMP_COD_GRUPO_EMP`,`GRE_USUARIO_WEB`),
CONSTRAINT `FK_EMP_GRU` FOREIGN KEY (`EMP_COD_GRUPO_EMP`, `GRE_USUARIO_WEB`) REFERENCES `grupo_empresas` (`GRE_CODIGO`, `GRE_USUARIO_WEB`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=15;
--
-- Esta es detalle de empresas
--
CREATE TABLE `calendario_empresa` (
`CAE_ID` int(10) NOT NULL auto_increment,
`CAE_CODIGO` int(10) NOT NULL default '0',
`CAE_COD_EMPRESA` int(5) NOT NULL default '0',
`CAE_COD_GRUPO_EMP` int(5) NOT NULL default '0',
`CAE_USUARIO_WEB` int(10) NOT NULL default '0',
PRIMARY KEY (`CAE_ID`,`CAE_CODIGO`,`CAE_COD_EMPRESA`,`CAE_COD_GRUPO_EMP`,`CAE_USUARIO_WEB`),
KEY `FK_CAE_EMP` (`CAE_COD_EMPRESA`,`CAE_COD_GRUPO_EMP`,`CAE_USUARIO_WEB`),
CONSTRAINT `FK_CAE_EMP` FOREIGN KEY (`CAE_COD_EMPRESA`, `CAE_COD_GRUPO_EMP`, `CAE_USUARIO_WEB`) REFERENCES `empresas` (`EMP_CODIGO`, `EMP_COD_GRUPO_EMP`, `GRE_USUARIO_WEB`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;
--
-- Esta Debería ser detalle de calendarios_empresas
-- Pero cuando creo su FK me salta el error "ERROR 1005: Can't create table '.\nominas\#sql-6cc_2.frm' (errno: 150)"
--
CREATE TABLE `even_cal_emp` (
`EVE_ID` int(10) NOT NULL,
`EVE_COD_CALENDAR` int(10) NOT NULL default '0',
`EVE_COD_EMPRESA` int(5) NOT NULL default '0',
`EVE_COD_GRUPO_EMP` int(5) NOT NULL default '0',
`EVE_USUARIO_WEB` int(10) NOT NULL default '0',
PRIMARY KEY (`EVE_ID`,`EVE_COD_CALENDAR`,`EVE_USUARIO_WEB`,`EVE_COD_GRUPO_EMP`,`EVE_COD_EMPRESA`),
KEY `FK_EVE_CAE` (`EVE_COD_CALENDAR`,`EVE_COD_EMPRESA`,`EVE_COD_GRUPO_EMP`,`EVE_USUARIO_WEB`),
CONSTRAINT `FK_CAE_EMP` FOREIGN KEY (`CAE_CODIGO`,`CAE_COD_EMPRESA`,`CAE_COD_GRUPO_EMP`,`CAE_USUARIO_WEB`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;
--
-- También he probado a primero generar la tabla y después hacer un alter table con us FK
--
CREATE TABLE `even_cal_emp` (
`EVE_ID` int(10) NOT NULL,
`EVE_COD_CALENDAR` int(10) NOT NULL default '0',
`EVE_COD_EMPRESA` int(5) NOT NULL default '0',
`EVE_COD_GRUPO_EMP` int(5) NOT NULL default '0',
`EVE_USUARIO_WEB` int(10) NOT NULL default '0',
PRIMARY KEY (`EVE_ID`,`EVE_COD_CALENDAR`,`EVE_USUARIO_WEB`,`EVE_COD_GRUPO_EMP`,`EVE_COD_EMPRESA`)
) ENGINE=InnoDB;
--
-- Aqui es donde creo su FK
--
ALTER TABLE `nominas`.`even_cal_emp`
ADD CONSTRAINT `FK_EVE_CAE`
FOREIGN KEY (`EVE_COD_CALENDAR` , `EVE_COD_EMPRESA` , `EVE_COD_GRUPO_EMP` , `EVE_USUARIO_WEB` )
REFERENCES `nominas`.`calendario_empresa` (`CAE_CODIGO` , `CAE_COD_EMPRESA` , `CAE_COD_GRUPO_EMP` , `CAE_USUARIO_WEB` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
, ADD INDEX `FK_EVE_CAE` (`EVE_COD_CALENDAR` ASC, `EVE_COD_EMPRESA` ASC, `EVE_COD_GRUPO_EMP` ASC, `EVE_USUARIO_WEB` ASC) ;
Bueno, gracias a todos...