2013-12-22 121 views
1

首先,我正在使用DB2。外鍵的SQL外鍵

我的問題:

  • 我有一個表A有一個主鍵。
  • 甲表B 2個主鍵(它們中的一個是A外鍵)
  • 甲表C具有主鍵
  • 甲表D已經得到了B主鍵和C

如何創建表D

我的第一個想法是,但它不工作:

Create Table D(
    A varchar(20) not null references B(A), 
    B varchar(20) not null references B(name of prim key attribute from B), 
    C varchar(20) not null references C, 
    primary key(A,B,C)  
); 

希望你能理解我的問題,並能幫助我。

+2

一個表只能曾經有** **中之一的主鍵 - 你大概的意思是**主鍵** **從2列** –

+0

由或者你的意思是表B中有兩個獨立的列,每個獨立的列?也許沒有必要或沒有意義將它們組合成一個組合鍵? – WarrenT

回答

2

外鍵引用列的名稱,限制沒有名稱。

設置。 。 。

create table A (
    col_a int primary key 
); 

create table B (
    col_a int not null, 
    col_b int not null, 
    primary key (col_a, col_b), 
    foreign key (col_a) references A (col_a) 
); 

create table C (
    col_c int primary key 
); 

並執行。 。 。

create table D (
    col_a int not null, 
    col_b int not null, 
    col_c int not null, 
    primary key (col_a, col_b, col_c), 
    foreign key (col_a, col_b) references B (col_a, col_b), 
    foreign key (col_c) references C (col_c) 
); 
+0

謝謝。這正是我搜索的=) – user3117357

0

正如Marc_s所說,表中只能有一個主鍵,即表中不能有多個主鍵。

作爲解決你的問題,你或許可以組合表B和表C中的兩列可以一起充當表d主鍵

+0

好吧,你能給我舉個例子嗎? – user3117357