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)的唯一值的约束(限制)?或者我应该在应用程序中检查这个?

4

3 回答 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));

PRIMARY KEY 是 UNIQUE 索引的一种特殊情况。使用复合 PRIMARY KEY 可为您节省一列和一个索引,但要求您的应用程序了解这两者t1_idt2_id从表中检索单行。

于 2012-05-08T15:25:51.297 回答
8

您可以将唯一约束添加到您的 create table 语句。这不必是主键。

UNIQUE(t1_id, t2_id),
于 2015-03-26T19:26:05.763 回答
0

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

于 2016-07-05T10:13:38.260 回答