MySQL Forums
Forum List  »  InnoDB

Composite Foreign Key Problem (MAYBE)
Posted by: Luis Masuelli
Date: May 21, 2008 04:29PM

I need to include in my model a composite foreign key and it fails...

Now i'll write the script, i can't find where is exactly the error...

***********************************
Script
***********************************

CREATE TABLE EmpresaProveedor (
id_empresa INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
empresa_nombre VARCHAR(30) NOT NULL,
empresa_tipo ENUM('SA','SRL','SCL','SACI') NOT NULL DEFAULT 'SRL',
empresa_cuit VARCHAR(14) NOT NULL,
empresa_cod_ingbrut VARCHAR(10) NOT NULL,
empresa_cond_impositiva ENUM('MT','IVARI','IVARNI') NOT NULL DEFAULT 'IVARI',
empresa_loc_provincia ENUM('Capital Federal','Buenos Aires','Catamarca','Chaco','Chubut','Cordoba','Corrientes','Entre Rios','Formosa','Jujuy','La Pampa','La Rioja','Mendoza','Misiones','Neuquen','Rio Negro','Salta','San Juan','San Luis','Santa Cruz','Santa Fe','Santiago del Estero','Tierra del Fuego','Tucuman') NOT NULL DEFAULT 'Capital Federal',
empresa_loc_ciudad VARCHAR(50) NOT NULL,
empresa_loc_calle VARCHAR(50) NOT NULL,
empresa_loc_altura INTEGER UNSIGNED NOT NULL,
emrpesa_loc_piso INTEGER UNSIGNED NULL,
empresa_loc_depto VARCHAR(5) NULL,
empresa_loc_codpos INTEGER UNSIGNED NOT NULL,
empresa_loc_telefono VARCHAR(20) NOT NULL,
empresa_loc_fax VARCHAR(20) NOT NULL,
responsable_nombre VARCHAR(35) NOT NULL,
responsable_apellido VARCHAR(35) NOT NULL,
responsable_fenac DATE NOT NULL,
responsable_cuil VARCHAR(14) NOT NULL,
responsable_loc_provincia ENUM('Capital Federal','Buenos Aires','Catamarca','Chaco','Chubut','Cordoba','Corrientes','Entre Rios','Formosa','Jujuy','La Pampa','La Rioja','Mendoza','Misiones','Neuquen','Rio Negro','Salta','San Juan','San Luis','Santa Cruz','Santa Fe','Santiago del Estero','Tierra del Fuego','Tucuman') NOT NULL DEFAULT 'Capital Federal',
responsable_loc_ciudad VARCHAR(50) NOT NULL,
responsable_loc_calle VARCHAR(50) NOT NULL,
responsable_loc_altura INTEGER UNSIGNED NOT NULL,
responsable_loc_piso INTEGER UNSIGNED NULL,
responsable_loc_depto VARCHAR(50) NULL,
responsable_loc_codpos INTEGER UNSIGNED NOT NULL,
responsable_loc_telefono VARCHAR(20) NOT NULL,
responsable_loc_email VARCHAR(135) NOT NULL,
cuenta_fecha_creacion DATE NOT NULL,
cuenta_estado ENUM('alta','baja') NOT NULL DEFAULT 'alta',
ordenes_acuerdoconf LONGTEXT NOT NULL,
ordenes_observaciones LONGTEXT NOT NULL,
ordenes_requerimientos LONGTEXT NOT NULL,
proxima_oc_id INTEGER UNSIGNED NOT NULL DEFAULT 0,
proximo_prod_id INTEGER UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY(id_empresa)
)
TYPE=InnoDB;

CREATE TABLE EmpresaCliente (
id_empresa INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
empresa_nombre VARCHAR(30) NOT NULL,
empresa_tipo ENUM('SA','SRL','SCL','SACI') NOT NULL DEFAULT 'SRL',
empresa_cuit VARCHAR(14) NOT NULL,
empresa_cod_ingbrut VARCHAR(10) NOT NULL,
empresa_cond_impositiva ENUM('MT','IVARI','IVANRI') NOT NULL DEFAULT 'IVARI',
empresa_pred_ingbrut FLOAT NOT NULL,
empresa_pred_impositiva FLOAT NOT NULL,
empresa_loc_provincia ENUM('Capital Federal','Buenos Aires','Catamarca','Chaco','Chubut','Cordoba','Corrientes','Entre Rios','Formosa','Jujuy','La Pampa','La Rioja','Mendoza','Misiones','Neuquen','Rio Negro','Salta','San Juan','San Luis','Santa Cruz','Santa Fe','Santiago del Estero','Tierra del Fuego','Tucuman') NOT NULL DEFAULT 'Capital Federal',
empresa_loc_ciudad VARCHAR(50) NOT NULL,
empresa_loc_calle VARCHAR(50) NOT NULL,
empresa_loc_altura INTEGER UNSIGNED NOT NULL,
empresa_loc_piso INTEGER UNSIGNED NULL,
empresa_loc_depto VARCHAR(5) NULL,
empresa_loc_codpos INTEGER UNSIGNED NOT NULL,
empresa_loc_telefono VARCHAR(20) NOT NULL,
empresa_loc_fax VARCHAR(20) NULL,
responsable_nombre VARCHAR(35) NOT NULL,
responsable_apellido VARCHAR(35) NOT NULL,
responsable_fenac DATE NOT NULL,
responsable_genero ENUM('m','f') NOT NULL DEFAULT 'm',
responsable_cuil VARCHAR(14) NOT NULL,
responsable_loc_provincia ENUM('Capital Federal','Buenos Aires','Catamarca','Chaco','Chubut','Cordoba','Corrientes','Entre Rios','Formosa','Jujuy','La Pampa','La Rioja','Mendoza','Misiones','Neuquen','Rio Negro','Salta','San Juan','San Luis','Santa Cruz','Santa Fe','Santiago del Estero','Tierra del Fuego','Tucuman') NOT NULL DEFAULT 'Capital Federal',
responsable_loc_ciudad VARCHAR(50) NOT NULL,
responsable_loc_calle VARCHAR(50) NOT NULL,
responsable_loc_altura INTEGER UNSIGNED NOT NULL,
responsable_loc_piso INTEGER UNSIGNED NULL,
responsable_loc_depto VARCHAR(5) NULL,
responsable_loc_codpos INTEGER UNSIGNED NOT NULL,
responsable_loc_telefono INTEGER UNSIGNED NOT NULL,
responsable_loc_email VARCHAR(135) NOT NULL,
cuenta_usuario VARCHAR(20) NOT NULL,
cuenta_clave CHAR(32) NOT NULL,
cuenta_email VARCHAR(135) NOT NULL,
cuenta_fecha_creacion DATE NOT NULL,
cuenta_fecha_aprobacion DATE NULL,
cuenta_estado ENUM('pendiente','rechazado','activo','suspendido','baja') NOT NULL DEFAULT 'pendiente',
cuenta_proxima_oc_id INTEGER UNSIGNED NOT NULL,
ordenes_conversion LONGTEXT NOT NULL,
ordenes_multa LONGTEXT NOT NULL,
ordenes_garantia LONGTEXT NOT NULL,
ordenes_inspeccion LONGTEXT NOT NULL,
ordenes_observaciones LONGTEXT NOT NULL,
ordenes_requerimientos LONGTEXT NOT NULL,
ordenes_acuerdoconf LONGTEXT NOT NULL,
PRIMARY KEY(id_empresa)
)
TYPE=InnoDB;

CREATE TABLE Pedido (
EmpresaCliente_id_empresa INTEGER UNSIGNED NOT NULL,
id_pedido INTEGER UNSIGNED NOT NULL,
fecha_emision DATETIME NOT NULL,
fecha_resolucion DATETIME NULL DEFAULT NULL,
estado ENUM('pendiente','aprobada','anulada') NOT NULL DEFAULT 'pendiente',
fecha_entrega_requerida DATETIME NOT NULL,
obra VARCHAR(255) NULL,
referencia VARCHAR(50) NOT NULL,
forma_de_pago VARCHAR(255) NOT NULL DEFAULT 'efectivo',
revision INTEGER UNSIGNED NOT NULL,
fecha_ultima_revision DATETIME NULL,
forma_de_entrega VARCHAR(255) NOT NULL,
moneda_de_pago ENUM('pesos','dolares') NOT NULL DEFAULT 'pesos',
certificara VARCHAR(255) NULL,
comprador VARCHAR(255) NULL,
aprobo VARCHAR(255) NULL,
proximo_item_id INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(EmpresaCliente_id_empresa, id_pedido),
INDEX Pedido_FKIndex1(EmpresaCliente_id_empresa),
FOREIGN KEY(EmpresaCliente_id_empresa)
REFERENCES EmpresaCliente(id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE Producto (
EmpresaProveedor_id_empresa INTEGER UNSIGNED NOT NULL,
id_producto INTEGER UNSIGNED NOT NULL,
descripcion MEDIUMTEXT NOT NULL,
precio_unitario FLOAT NOT NULL,
estado ENUM('alta','baja','nostock') NOT NULL DEFAULT 'alta',
PRIMARY KEY(EmpresaProveedor_id_empresa, id_producto),
INDEX Producto_FKIndex1(EmpresaProveedor_id_empresa),
FOREIGN KEY(EmpresaProveedor_id_empresa)
REFERENCES EmpresaProveedor(id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE ItemCliente (
Pedido_EmpresaCliente_id_empresa INTEGER UNSIGNED NOT NULL,
Pedido_id_pedido INTEGER UNSIGNED NOT NULL,
id_item INTEGER UNSIGNED NOT NULL,
cantidad FLOAT NOT NULL,
descripcion MEDIUMTEXT NOT NULL,
estado ENUM('pendiente','anulado','aprobado') NOT NULL DEFAULT 'pendiente',
PRIMARY KEY(Pedido_EmpresaCliente_id_empresa, Pedido_id_pedido, id_item),
INDEX ItemCliente_FKIndex1(Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa),
FOREIGN KEY(Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa)
REFERENCES Pedido(id_pedido, EmpresaCliente_id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE OrdenDeCompra (
EmpresaProveedor_id_empresa INTEGER UNSIGNED NOT NULL,
id_ordencompra INTEGER UNSIGNED NOT NULL,
Pedido_EmpresaCliente_id_empresa INTEGER UNSIGNED NOT NULL,
Pedido_id_pedido INTEGER UNSIGNED NOT NULL,
fecha_emision DATETIME NOT NULL,
proximo_item_id INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(EmpresaProveedor_id_empresa, id_ordencompra),
INDEX OrdenDeCompra_FKIndex1(EmpresaProveedor_id_empresa),
INDEX OrdenDeCompra_FKIndex2(Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa),
FOREIGN KEY(EmpresaProveedor_id_empresa)
REFERENCES EmpresaProveedor(id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa)
REFERENCES Pedido(id_pedido, EmpresaCliente_id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE ItemOrdenDeCompra (
OrdenDeCompra_EmpresaProveedor_id_empresa INTEGER UNSIGNED NOT NULL,
OrdenDeCompra_id_ordencompra INTEGER UNSIGNED NOT NULL,
id_ioc INTEGER UNSIGNED NOT NULL,
Producto_EmpresaProveedor_id_empresa INTEGER UNSIGNED NOT NULL,
Producto_id_producto INTEGER UNSIGNED NOT NULL,
cantidad FLOAT NOT NULL,
precio_unitario FLOAT NOT NULL,
descuento FLOAT NOT NULL,
porcentaje_iva FLOAT NOT NULL,
fecha_estimada_entrega INTEGER UNSIGNED NOT NULL,
prcentaje_ingbrut FLOAT NOT NULL,
PRIMARY KEY(OrdenDeCompra_EmpresaProveedor_id_empresa, OrdenDeCompra_id_ordencompra, id_ioc),
INDEX ItemOrdenDeCompra_FKIndex1(OrdenDeCompra_id_ordencompra, OrdenDeCompra_EmpresaProveedor_id_empresa),
INDEX ItemOrdenDeCompra_FKIndex2(Producto_id_producto, Producto_EmpresaProveedor_id_empresa),
FOREIGN KEY(OrdenDeCompra_id_ordencompra, OrdenDeCompra_EmpresaProveedor_id_empresa)
REFERENCES OrdenDeCompra(id_ordencompra, EmpresaProveedor_id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(Producto_id_producto, Producto_EmpresaProveedor_id_empresa)
REFERENCES Producto(id_producto, EmpresaProveedor_id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE ObservacionesParticulares (
EmpresaCliente_id_empresa INTEGER UNSIGNED NOT NULL,
EmpresaProveedor_id_empresa INTEGER UNSIGNED NOT NULL,
observaciones MEDIUMTEXT NOT NULL,
PRIMARY KEY(EmpresaCliente_id_empresa, EmpresaProveedor_id_empresa),
INDEX EmpresaCliente_has_EmpresaProveedor_FKIndex1(EmpresaCliente_id_empresa),
INDEX EmpresaCliente_has_EmpresaProveedor_FKIndex2(EmpresaProveedor_id_empresa),
FOREIGN KEY(EmpresaCliente_id_empresa)
REFERENCES EmpresaCliente(id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY(EmpresaProveedor_id_empresa)
REFERENCES EmpresaProveedor(id_empresa)
ON DELETE CASCADE
ON UPDATE CASCADE
)
TYPE=InnoDB;

****************************************
The Error
****************************************

CREATE TABLE ItemCliente(

Pedido_EmpresaCliente_id_empresa INTEGER UNSIGNED NOT NULL ,
Pedido_id_pedido INTEGER UNSIGNED NOT NULL ,
id_item INTEGER UNSIGNED NOT NULL ,
cantidad FLOAT NOT NULL ,
descripcion MEDIUMTEXT NOT NULL ,
estado ENUM( 'pendiente', 'anulado', 'aprobado' ) NOT NULL DEFAULT 'pendiente',
PRIMARY KEY ( Pedido_EmpresaCliente_id_empresa, Pedido_id_pedido, id_item ) ,
INDEX ItemCliente_FKIndex1( Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa ) ,
FOREIGN KEY ( Pedido_id_pedido, Pedido_EmpresaCliente_id_empresa ) REFERENCES Pedido( id_pedido, EmpresaCliente_id_empresa ) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE = InnoDB;



MySQL ha dicho:

#1005 - Can't create table '.\comprasintegradas\itemcliente.frm' (errno: 150)

Options: ReplyQuote


Subject
Views
Written By
Posted
Composite Foreign Key Problem (MAYBE)
3348
May 21, 2008 04:29PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.