2013-03-18 93 views
0
create table finishedMaterials(
FinishedMaterialID VARCHAR(4) NOT NULL, 
FinishedMaterialType VARCHAR(10) NOT NULL, 
FinishedMaterialWeight INT(5) NOT NULL, 
FinishedMaterialUnits INT(5) NOT NULL, 
CONSTRAINT PRIMARY KEY (FinishedMaterialID))ENGINE=INNODB; 

create table vehicles(
VehicleID VARCHAR(4) NOT NULL, 
VehicleNumber VARCHAR(8), 
VehicleType VARCHAR(10) NOT NULL, 
VehicleCondition VARCHAR(10) NOT NULL, 
VehicleRemarks VARCHAR(100), 
CONSTRAINT PRIMARY KEY (VehicleID))ENGINE=INNODB; 

create table transport(
TransportID VARCHAR(4) NOT NULL, 
VehicleID VARCHAR(4) NOT NULL, 
FinishedMaterialID VARCHAR(4) NOT NULL, 
FinishedMaterialUnits INT(5) NOT NULL, 
FinishedMaterialWeight INT(5) NOT NULL, 
CONSTRAINT PRIMARY KEY (TransportID), 
CONSTRAINT FOREIGN KEY (VehicleID) REFERENCES vehicles(VehicleID), 
CONSTRAINT FOREIGN KEY (FinishedMaterialID) REFERENCES finishedMaterials(FinishedMaterialID), 
CONSTRAINT FOREIGN KEY (FinishedMaterialUnits) REFERENCES finishedMaterials(FinishedMaterialUnits), 
CONSTRAINT FOREIGN KEY (FinishedMaterialWeight) REFERENCES finishedMaterials(FinishedMaterialWeight))ENGINE=INNODB; 

•什么是错误的代码?什么导致这个错误?请帮忙。除了最后一个之外,所有其他表格,包括这个代码的前两个都是完美的。错误1005(HY000)|无法创建表

回答

2

你的最后2个外键不引用索引键在主表

编辑:他们不应该。 FinishedMaterialWeight和FinsihedMaterialUnits不是finishedMaterials表的唯一键。只需要FinishedMaterialID。

1

维基百科..

“外键是在关系表中的字段匹配另一个表的候选键。外键可以用来对照表”。

然而,

CONSTRAINT FOREIGN KEY (FinishedMaterialUnits) REFERENCES finishedMaterials(FinishedMaterialUnits), 
CONSTRAINT FOREIGN KEY (FinishedMaterialWeight) REFERENCES finishedMaterials(FinishedMaterialWeight))ENGINE=INNODB; 

上面列,FinishedMaterialUnits和FinishedMaterialWeight,不在其表候选键。

我认为你的设计有点缺陷,因为这两列没有被SUPPOSED表中的每一行都是唯一的。例如,单位计数可以重复。

相关问题