Tengo una tabla que se supone que rastrea los días y los costos para el envío de productos de un proveedor a otro. Nosotros (brillantemente: p) almacenamos tanto a los proveedores de envío (FedEx, UPS) como a los proveedores de manejo de productos (Think ... Dunder Mifflin) en una mesa "VENDOR". Por lo tanto, tengo tres columnas en mi tabla SHIPPING_DETAILS que hacen referencia a VENDOR.no. Por algún motivo, MySQL no me permite definir las tres claves foráneas. ¿Algunas ideas?¿Llaves extranjeras múltiples?
CREATE TABLE SHIPPING_GRID(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row',
shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)',
start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from',
end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to',
shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take',
price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)',
is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs',
INDEX (shipping_vendor_no),
INDEX (start_vendor_no),
INDEX (end_vendor_no),
FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no),
FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no),
FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no)
) TYPE = INNODB;
Editado para eliminar el doble definición de la clave primaria ...
Sí, por desgracia, que no ha solucionado el problema sin embargo. Ahora me estoy haciendo:
No se puede crear la tabla './ quité DB NOMBRE /SHIPPING_GRID.frm' (Error: 150)
Haciendo un phpinfo() le dice mí esto para MySQL:
versión de la API de cliente 5.0.45
Sí, el VENDOR.no es de tipo int (6).
De hecho, el error? 150 hace referencia a un error de [restricciones de clave externa] (http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html). ¿Puedes proporcionar la definición de la tabla de VENDEDORES? ¿El PK de VENDOR es INT (6) o solo INT? Desde la página anterior: - * El tamaño y el signo de los tipos enteros deben ser iguales. * –