2014-09-10 60 views
0

我正在使用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) 
); 

感謝, 賈斯汀

+0

你這裏是什麼**,恰好包含多個列一個**主鍵(又名「複合」或「複合」 PK) 。既然你只有一個PK,你只需要一個FK來引用它。但是你需要引用** whole ** PK,而不僅僅是其中的一列。 – 2014-09-10 23:32:12

回答

2

作爲一個經驗法則,外鍵僅指一個獨特的密鑰。

邏輯的解釋是..說,當你創建一個外鍵refence只是指第一列,有可能是在父兩個值你的名字

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

。這顯然是曖昧的!而當你創建一個包含這兩個列(這是唯一的)的參考時,模糊不再是!

您收到的錯誤消息是陳述相同的。

does not identify a unique constraint of the parent table 

Now..Analysing烏爾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 
); 

你定義一個表1的PK,包括2列。

在第二張表中,您只需創建一個指向其中一列的外鍵!所以錯誤。

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.. 
); 
+0

我首先嚐試了這個,並得到了同樣的錯誤。例如,請參閱上面我的帖子的編輯。 – Justin 2014-09-10 23:17:30

+1

添加了一些解釋 – 2014-09-10 23:21:26

+0

我可以看到爲什麼我的解決方案無法正常工作。有沒有辦法讓它起作用?我可以以某種方式指定表2中的2列在表1中是唯一的嗎? – Justin 2014-09-10 23:29:24

相關問題