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;

• このコードのどこが間違っていますか? このエラーの原因は何ですか? 助けてください。このコードの上位 2 つを含む他のすべてのテーブルは、最後のテーブルを除いて完全に機能します。

4

2 に答える 2

2

Your last 2 foreign keys do not reference indexed keys in the primary table

Edit: And they shouldn't. FinishedMaterialWeight and FinsihedMaterialUnits are not unique keys to the finishedMaterials table. Only FinishedMaterialID is needed.

于 2013-03-18T14:53:00.923 に答える
1

ウィキペディアより..

「外部キーは、別のテーブルの候補キーと一致するリレーショナル テーブル内のフィールドです。外部キーを使用して、テーブルを相互参照できます。」

一方、

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

上記の列、FinishedMaterialUnits および FinishedMaterialWeight は、それらのテーブルの候補キーではありません。

これらの 2 つの列は、テーブル内のすべての行で一意であるとは想定されていないため、設計に少し欠陥があると思います。たとえば、ユニット数は繰り返すことができます。

于 2013-03-18T14:53:57.143 に答える