15

2 つのテーブルがあり、各テーブルには複合主キーがあります。

1 つの属性が両方の複合主キーにあります。

共通属性を参照するにはどうすればよいですか?? 以下のように、両方のテーブルで FK として参照するだけですか? 以下の cust_id と flight_id も複合キーの各部分であり、他のテーブルの主キーを参照します。(最後に複合キーを使用することを選択したため、br_flight テーブルの erd の 3 番目の属性は無視してください)。

CREATE TABLE BOOKING_REFERENCE (
REFERENCE_ID NVARCHAR(10) NOT NULL,
CUST_ID NUMBER(10)NOT NULL,
STATUS NVARCHAR (1), NOT NULL,
PRIMARY KEY(REFERENCE_ID, CUST_ID),
FOREIGN KEY(REFERENCE_ID) REFERENCES BR_FLIGHT(REFERENCE_ID):
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID);


CREATE TABLE BR_FLIGHT (
REFERENCE_ID NVARCHAR(10) NOT NULL ,
FLIGHT_ID NVARCHAR (10) NOT NULL,
PRIMARY KEY(REFERENCE_ID, FLIGHT_ID),
FOREIGN KEY (REFERENCE_ID) REFERENCES BOOKING_REFERENCE(REFERENCE_ID)
FOREIGN KEY (FLIGHT_ID) REFERENCES FLIGHT(FLIGHT_ID)

);

ここに画像の説明を入力

上記のSQLは機能しますか?? 事前に感謝し、見苦しい図をお詫びします:)

4

3 に答える 3

25

外部キーは、列の列を参照する主/一意のキーと一致する必要があります。の主キーBOOKING_REFERENCEは ( REFERENCE_ID, CUST_ID) であるため、 からの外部キーも 2 つの列で構成されBR_FLIGHTている必要があります。BOOKING_REFERENCEつまりCUST_IDBR_FLIGHTテーブルに追加する必要があります-それまたはBOOKING_REFERENCE主キーが間違っているため、 ( REFERENCE_ID) にする必要があります。

とはいえ、外部キーを双方向で定義するのは意味がありません。「子」テーブルは「親」を参照する必要があり、その逆はできません。

于 2013-05-01T18:07:08.303 に答える
1

UNIQUE制限を設定する必要があります:

CREATE TABLE BOOKING_REFERENCE (
REFERENCE_ID NVARCHAR(10) NOT NULL UNIQUE,
CUST_ID NUMBER(10)NOT NULL,
STATUS NVARCHAR (1), NOT NULL,
PRIMARY KEY(REFERENCE_ID, CUST_ID),
FOREIGN KEY(REFERENCE_ID) REFERENCES BR_FLIGHT(REFERENCE_ID):
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID);


CREATE TABLE BR_FLIGHT (
REFERENCE_ID NVARCHAR(10) NOT NULL ,
FLIGHT_ID NVARCHAR (10) NOT NULL,
PRIMARY KEY(REFERENCE_ID, FLIGHT_ID),
FOREIGN KEY (REFERENCE_ID) REFERENCES BOOKING_REFERENCE(REFERENCE_ID)
FOREIGN KEY (FLIGHT_ID) REFERENCES FLIGHT(FLIGHT_ID)
);
于 2018-01-06T14:25:27.037 に答える