2012-05-08 148 views
8

我創建其連接表T1T2如下表T1T2組合兩列的唯一約束

CREATE TABLE t1t2(
id integer primary key, 
t1_id integer, 
t2_id integer, 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

是否有可能定義一個約束(限制),使只有獨特元組值(t1_id,t2_id)?或者我應該在應用程序中檢查這個嗎?

回答

14
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id) 

您可能需要將NOT NULL添加到兩列中的每一列的聲明中。

或者,你可以選擇放棄主鍵列(如果你正在使用它是唯一),並創建的t1_idt2_id組合中的主鍵:

CREATE TABLE t1t2(
t1_id integer NOT NULL, 
t2_id integer NOT NULL, 
PRIMARY KEY (t1_id, t2_id), 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

主鍵是UNIQUE索引的特例。使用複合PRIMARY KEY可以保存一列和一個索引,但要求應用程序知道t1_idt2_id以從表中檢索單個行。

+0

它不僅爲唯一(我需要t1t2.id列),但我很感興趣在替代方法中。你能看看桌子嗎?我會等一段時間才能確定這是正確的,謝謝。 – xralf

+1

查看編輯答案。 –

6

您可以爲創建表語句添加一個唯一約束。 這不一定是主鍵。

UNIQUE(t1_id, t2_id), 
0

你可以創建這些選項你唯一主索引,讓您的主鍵和唯一約束SQL Lite New Index option

+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – mathielo