两列组合唯一约束

9

我创建了表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)的值唯一?还是应该在应用程序中进行检查?

3个回答

16
 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));

主键是唯一索引的一种特殊情况。使用复合主键可以节省一列和一个索引,但需要应用程序同时知道 t1_idt2_id 才能从表中检索单个行。


这不仅仅是为了唯一性(我需要t1t2.id列),而是我对替代方法感兴趣。能给我展示一下表格吗?在确认无误之前,我会等待一段时间再接受的,谢谢。 - xralf

8
您可以在创建表语句中添加唯一约束。这不必是主键。
UNIQUE(t1_id, t2_id),

0

您可以使用这些选项创建您独特的主索引,以保留您的主键和唯一约束SQL Lite新索引选项


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面发生更改可能会变得无效。 - mathielo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接