2015-09-20 129 views
-2

我試圖創建一個使用複合鍵作爲其主鍵的表。 我在分配組合鍵中的第二個值時遇到了問題,因爲它是不同表中的外鍵。這是一個例子。包含外鍵的複合鍵

create table Table1 
(Table1ID NVARCHAR(8) NOT NULL, 
... 
PRIMARY KEY (Table1ID)); 

create table Table2 
(Table2ID NVARCHAR2(8) NOT NULL, 
... 
CONSTRAINT Table2ID_Table1ID_PK PRIMARY KEY (Table2ID, Table1ID)); <---- Here 

在第二個表,我試圖讓主鍵包括從表1的主鍵。我是否需要包含類似REFERENCES Table1(Table1ID));

此外,將數據插入到表2中的複合鍵的正確方法是什麼? insert into Table2 values ('101, 1001', ....);

乾杯。

+0

該表必須在表格中的任何約束之前包含在表格中! –

+0

我明白了,所以不可能從另一個表中繼承一個實體用於組合鍵? – P3rry

+1

你應該包括你的rdbms'Sql Server','Oracle'等。告訴我們你有什麼嘗試和你有什麼錯誤。因爲一開始看起來似乎沒問題。請閱讀[如何問](http://stackoverflow.com/help/how-to-ask) –

回答

0

您可以在複合主鍵中使用外鍵,但請注意您將創建1對1映射,而表B將依賴於表A,因此爲了保持表A中的行/ ID的參照完整性必須已經存在,然後再嘗試插入到表B中,並將A的主鍵用作主鍵中的外鍵,並且反映此設計選擇,我在該解決方案中添加了ON DELETE子句。

沒有太多的修改,你可以使用這個MySQL解決方案來適應你選擇的DMBS,因爲你沒有指定你正在使用的東西。

CREATE TABLE TableA 
(
    id int NOT NULL PRIMARY KEY 
    .. 
); 

CREATE TABLE TableB 
(
    id    int NOT NULL, 
    tableA_id  int NOT NULL, 
    ... 
    FOREIGN KEY (tableA_id) REFERENCES TableA(id) ON DELETE CASCADE, 
    PRIMARY KEY(id, tableA_id) 
);