Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/01/2011, 02:48
kavalerian
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 21 años, 4 meses
Puntos: 0
Problema con claves ajenas

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_IDint(10NOT NULL auto_increment,
  `
GRE_CODIGOint(5NOT NULL,
  `
GRE_USUARIO_WEBint(10NOT 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_IDint(10NOT NULL auto_increment COMMENT 'Identificador de la empresa',
  `
EMP_CODIGOint(5NOT NULL default '0' COMMENT 'Codigo de la empresa',
  `
EMP_COD_GRUPO_EMPint(5NOT NULL default '0',
  `
GRE_USUARIO_WEBint(10NOT 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_GRUFOREIGN 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_IDint(10NOT NULL auto_increment,
  `
CAE_CODIGOint(10NOT NULL default '0',
  `
CAE_COD_EMPRESAint(5NOT NULL default '0',
  `
CAE_COD_GRUPO_EMPint(5NOT NULL default '0',
  `
CAE_USUARIO_WEBint(10NOT 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_EMPFOREIGN 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_IDint(10NOT NULL,
  `
EVE_COD_CALENDARint(10NOT NULL default '0',
  `
EVE_COD_EMPRESAint(5NOT NULL default '0',
  `
EVE_COD_GRUPO_EMPint(5NOT NULL default '0',
  `
EVE_USUARIO_WEBint(10NOT 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_EMPFOREIGN 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_IDint(10NOT NULL,
  `
EVE_COD_CALENDARint(10NOT NULL default '0',
  `
EVE_COD_EMPRESAint(5NOT NULL default '0',
  `
EVE_COD_GRUPO_EMPint(5NOT NULL default '0',
  `
EVE_USUARIO_WEBint(10NOT 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_CALENDARASC, `EVE_COD_EMPRESAASC, `EVE_COD_GRUPO_EMPASC, `EVE_USUARIO_WEBASC) ; 
Bueno, gracias a todos...
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas