Сочетание двух столбцов уникальности
Я создал таблицу 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 новая опция индекса