我创建了表t1t2,它连接了表t1和t2,具体如下:
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)的值唯一?还是应该在应用程序中进行检查?
我创建了表t1t2,它连接了表t1和t2,具体如下:
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));
主键是唯一索引的一种特殊情况。使用复合主键可以节省一列和一个索引,但需要应用程序同时知道 t1_id
和 t2_id
才能从表中检索单个行。
UNIQUE(t1_id, t2_id),
您可以使用这些选项创建您独特的主索引,以保留您的主键和唯一约束SQL Lite新索引选项