2012-05-08 99 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