Применение уникальных строк в соединительной таблице многие-ко-многим - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть таблица соединений для отношения «многие ко многим», которая просто связывает два внешних ключа вместе. Однако я обнаружил, что это не предотвратит дублирование одинаковых записей строк. Как правильно обращаться с этим? Я думал, что добавление PRIMARY KEY к двум внешним ключам сделает это, но кажется, что я не правильно понимаю.

CREATE TABLE ab_link (
    a_id     bigint REFERENCES a(a_id) PRIMARY KEY,
    b_id     bigint REFERENCES b(b_id) PRIMARY KEY
);

Я нашел еще один вопрос в следующем примере:

CREATE TABLE bill_product (
  bill_id    int REFERENCES bill (bill_id) ON UPDATE CASCADE ON DELETE CASCADE
, product_id int REFERENCES product (product_id) ON UPDATE CASCADE
, amount     numeric NOT NULL DEFAULT 1
, CONSTRAINT bill_product_pkey PRIMARY KEY (bill_id, product_id)  -- explicit pk
);

Является ли это ограничение лучшим способом обеспечения уникальности? Я думаю, что есть какой-то способ сделать это без третьего ряда.

1 Ответ

0 голосов
/ 11 ноября 2018

Для составного первичного ключа вам нужно отдельное объявление:

CREATE TABLE ab_link (
    a_id     bigint REFERENCES a(a_id),
    b_id     bigint REFERENCES b(b_id),
    PRIMARY KEY (a_id, b_id)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...