2015-06-01 77 views
1

我的數據是在表中(這是一個例子):REFERENCE ON複合主鍵

BOX enter image description here

和箱內容表: enter image description here

而在系統中的每個框會是這樣的。因爲一個盒子必須具備: 客戶端代碼, 框代碼 和箱NUM

,並在框中每個項目必須具備: 客戶端代碼, 框代碼, BOX NUM 和一個數字爲每個項目。

現在,爲了這個,我做兩個表的複合主鍵:

CREATE TABLE BOX ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50), 
BOX_NUMBER SMALLINT, 
BOX_CONTENT NVARCHAR(250), 
CONSTRAINT PK_BOX_CLI_COD_NUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 
); 

CREATE TABLE BOX_CONTENT ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50), 
BOX_NUMBER SMALLINT, 
BOX_CONTENT_NUMBER SMALLINT, 
ID1 NVARCHAR(50), 
ID2 NVARCHAR(50), 
ID3 NVARCHAR(50), 
ID4 NVARCHAR(50) 
CONSTRAINT PK_BOXCONT_CLI_COD_BNUM_CNUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER, BOX_CONTENT_NUMBER) 
); 

我的問題是,怎樣才能引用表之間的外鍵? 這張表會有很多數據並需要參考。

如果我這樣做:

CONSTRAINT fk_BOX_CLI FOREIGN KEY(CLIENT_CODE) REFERENCES BOX(CLIENT_CODE), 
CONSTRAINT fk_BOX_CODE FOREIGN KEY(BOX_CODE) REFERENCES BOX(BOX_CODE), 
CONSTRAINT fk_BOX_NUMB FOREIGN KEY(BOX_NUMBER) REFERENCES BOX(BOX_NUMBER) 

我有一個錯誤,如果我在一個單行設置FK過。

有人有想法嗎? 可以理解的......

問候......

+0

請花時間用實際文字替換圖片(鏈接)。它看起來並不複雜。 –

+1

小寫的首字母標題 –

+0

感謝Royi, 但是當我試了一下,Tabs和空格錯位的文字。 因此,我插入圖片鏈接以更好地展示我擁有的和我需要的東西。 –

回答

4

你需要把約束在一個單一的參考:

CONSTRAINT fk_BOX FOREIGN KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 
    REFERENCES BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 

不過,我會鼓勵你把一個身份INT主鍵BOX,並將其用於外鍵引用。您可以聲明UNIQUE約束BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER)以防止重複。

+0

謝謝戈登, 它工作!!! .... –