我創建其連接表T1和T2如下表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)?或者我應該在應用程序中檢查這個嗎?
我創建其連接表T1和T2如下表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)?或者我應該在應用程序中檢查這個嗎?
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id)
您可能需要將NOT NULL添加到兩列中的每一列的聲明中。
或者,你可以選擇放棄主鍵列(如果你正在使用它是唯一),並創建的t1_id
和t2_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_id
和t2_id
以從表中檢索單個行。
您可以爲創建表語句添加一個唯一約束。 這不一定是主鍵。
UNIQUE(t1_id, t2_id),
你可以創建這些選項你唯一主索引,讓您的主鍵和唯一約束SQL Lite New Index option
儘管此鏈接可能會回答問題,但最好在此處包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – mathielo
它不僅爲唯一(我需要t1t2.id列),但我很感興趣在替代方法中。你能看看桌子嗎?我會等一段時間才能確定這是正確的,謝謝。 – xralf
查看編輯答案。 –