0

エラーメッセージが表示されているのに何が問題なのかわかりません:

メッセージ 1776、レベル 16、状態 0、行 56 外部キー 'FK_ Airplane _make__68487DD7'の参照列リストと一致する参照テーブル 'Airplane_type' に主キーまたは候補キーがありません。メッセージ 1750、レベル 16、状態 0、行 56 制約を作成できませんでした。以前のエラーを参照してください。

クエリのそのセクションは次のとおりです。

CREATE TABLE Airplane_type
(
make VARCHAR NOT NULL,
model VARCHAR NOT NULL,
type VARCHAR NOT NULL,
business_capacity INT NOT NULL,
economy_capacity INT NOT NULL,
range INT NOT NULL,
weight INT NOT NULL,
length INT NOT NULL,
wingspan INT NOT NULL,
PRIMARY KEY(make, model)
);

CREATE TABLE Airplane
(
airplane_ID VARCHAR(3) NOT NULL PRIMARY KEY,
make VARCHAR NOT NULL FOREIGN KEY REFERENCES Airplane_type(make),
model VARCHAR NOT NULL FOREIGN KEY REFERENCES Airplane_type(model)
);

どんな助けでも大歓迎です、ありがとう

4

3 に答える 3

3

2 つの列に主キーを作成しましたが、個別にではなく 2 つの列に外部キーを作成するべきではありませんか? 元のテーブルにはモデルが一意であることを保証するものがないため、個々の外部キーでモデル列を参照することはできません。

CREATE TABLE Airplane
(
  airplane_ID VARCHAR(3) NOT NULL PRIMARY KEY,
  make VARCHAR NOT NULL,
  model VARCHAR NOT NULL,
  CONSTRAINT FK_Airplane_type FOREIGN KEY (make, model) 
    REFERENCES Airplane_type(make, model)
);

また、なぜVARCHAR長さを指定せずに使用しているのですか? このブログ投稿をお読みください:

于 2012-04-16T21:49:33.330 に答える
1

外部キーによって参照される列は、主キーまたは一意のインデックスによって制約される必要があります。主キーは 2 つの列 (make、model) の複合であるため、外部キーも同じ複合ペアを参照する必要があります。

于 2012-04-16T21:50:53.403 に答える
0
CREATE TABLE Airplane_type
(
airplane_type_id not null Identity(1,1),
make VARCHAR NOT NULL,
model VARCHAR NOT NULL,
type VARCHAR NOT NULL,
business_capacity INT NOT NULL,
economy_capacity INT NOT NULL,
range INT NOT NULL,
weight INT NOT NULL,
length INT NOT NULL,
wingspan INT NOT NULL,
CONSTRAINT PK_AIRPLANE_TYPE PRIMARY KEY(airplane_type_id),
Constraint UK_Spotted_By_AARON Unique Key (make, model)
);

CREATE TABLE Airplane
(
airplane_ID VARCHAR(3) NOT NULL,
airplane_type_id int not null CONSTRAINT FK_Airplane_AirPlane_Type 
  Foreign Key References(AirPlane.Airplane_type_id),
Constraint PK_Airplane Primary Key (Airplane_id),
);

複合キーの一部を制約として使用することは、私の知る限りではうまくいきません。正規化すれば不要です。飛行機の型表にない製造元とモデルの組み合わせを持つ飛行機のスキーマを作成した方法は有効でした。

于 2012-04-16T21:58:26.177 に答える