簡體   English   中英

引用另一個表中的多個主鍵

[英]Referencing multiple primary keys in another table

我正在使用DB2創建一些表。 我有2張桌子,看起來像這樣:

create table TEST_TABLE1
/* */
(
PRIMARY_COLUMN1 int not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key (PRIMARY_COLUMN1,PRIMARY_COLUMN2)
);

create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int references TEST_TABLE1(PRIMARY_COLUMN1) not null,
PRIMARY_COLUMN2 varchar(50) references TEST_TABLE1(PRIMARY_COLUMN2) not null,
primary key(PRIMARY_COLUMN1,PRIMARY_COLUMN2)
);

當我嘗試添加表時,出現此錯誤:

SQL0573N  A column list specified in the references clause of constraint 
"PRIMARY_COLUMN1..." does not identify a unique constraint of the parent table 
or nickname "DB2INST1.TEST_TABLE1".  SQLSTATE=42890

有人知道我如何讓TEST_TABLE2引用TEST_TABLE1嗎?

我也嘗試過像這樣創建TEST_TABLE2並得到相同的錯誤:

create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int references TEST_TABLE1(PRIMARY_COLUMN1) not null,

primary key(PRIMARY_COLUMN1)
);

謝謝賈斯汀

根據經驗法則,外鍵只能引用唯一鍵。

合理的解釋是..說你有名字

FIRST LAST
-----------
John Abraham
John Jones

當您僅參考FIRST列創建外鍵引用時,父級中可能有兩個值。 這顯然是模棱兩可的! 而當您創建包含這兩個列的引用(唯一)時,歧義不再存在!

您收到的錯誤消息指出相同。

does not identify a unique constraint of the parent table 

現在...分析您的DDL,

create table TEST_TABLE1
/* */
(
PRIMARY_COLUMN1 int not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key (PRIMARY_COLUMN1,PRIMARY_COLUMN2)  <<----- Unique over 2 columns
);

您在包括2列的Table1中定義一個PK。

在第二張表中,您只需創建引用這些列之一的外鍵即可! 這樣的錯誤。

create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int 
   references TEST_TABLE1(PRIMARY_COLUMN1) not null, <<--------FK refers only one of them?

primary key(PRIMARY_COLUMN1) 
);

解決方案可能是:

create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int  not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key(PRIMARY_COLUMN1,PRIMARY_COLUMN2),
CONSTRAINT my_foreign FOREIGN KEY (PRIMARY_COLUMN1,PRIMARY_COLUMN2)
                    REFERENCES TEST_TABLE1(PRIMARY_COLUMN1,PRIMARY_COLUMN2)
     <<---- Refer both columns..
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM