Установите уникальное ограничение на t1_id, a_id
в t1
и t2_id, a_id
в t2
.Эти пары в любом случае уникальны, потому что t1_id
или t2_id
являются первичными ключами и поэтому уникальны.Но такое ограничение необходимо, чтобы позволить внешнему ключу ссылаться на такую пару.
Тогда в вашей таблице ссылок давайте назовем его t1_t2
, имеем t1_id
, t2_id
и a_id
и два внешнихклавиши t1_id, a_id
ссылаются t1_id, a_id
в t1
и t2_id, a_id
ссылаются t2_id, a_id
в t2
.То есть a_id
должно быть одинаковым в обеих ссылочных записях.
Чтобы тройка t1_id, t2_id, a_id
была уникальной, наложите на них уникальное ограничение или просто объявите их как первичный ключ.
CREATE TABLE a
(a_id integer,
PRIMARY KEY (a_id));
CREATE TABLE t1
(t1_id integer,
a_id integer,
PRIMARY KEY (t1_id),
FOREIGN KEY (a_id)
REFERENCES a
(a_id),
UNIQUE (t1_id,
a_id));
CREATE TABLE t2
(t2_id integer,
a_id integer,
PRIMARY KEY (t2_id),
FOREIGN KEY (a_id)
REFERENCES a
(a_id),
UNIQUE (t2_id,
a_id));
CREATE TABLE t1_t2
(t1_id integer,
t2_id integer,
a_id integer,
PRIMARY KEY (t1_id,
t2_id,
a_id),
FOREIGN KEY (t1_id,
a_id)
REFERENCES t1
(t1_id,
a_id),
FOREIGN KEY (t2_id,
a_id)
REFERENCES t2
(t2_id,
a_id));