Сочетание двух столбцов уникальности

Я создал таблицу 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)? Или я должен проверить это в программе?

3 ответов


 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 чтобы получить одну строку из таблицы.


вы можете добавить уникальное ограничение в инструкцию create table. Это не обязательно должен быть первичный ключ.

UNIQUE(t1_id, t2_id),

вы можете создать свой уникальный первичный индекс с этими параметрами, чтобы сохранить свой первичный ключ и уникальное ограничение SQL Lite новая опция индекса