Первичный ключ Postgres, позволяющий столкновение - PullRequest
0 голосов
/ 10 сентября 2018

Таблица должна иметь поведение, аналогичное первичному ключу (Item_id, Date, Status). Однако допускается многократный статус отмены.

Item_id  |Date       |Status   
--------------------------------
1        |2017-01-01 |Cancelled   
1        |2017-01-01 |Cancelled   
1        |2017-01-01 |Completed

В этом случае я смогу вставить:

('1', '2017-01-01', 'Cancelled')

И в этом случае запрос должен вернуть ошибку:

('1', '2017-01-01', 'Completed')

Есть ли способ использовать ограничение или другую реализацию для достижения этой цели?

1 Ответ

0 голосов
/ 10 сентября 2018

То, что вы спрашиваете, является противоречивым. Первичный ключ по определению уникален, поэтому невозможно иметь несколько строк с одним и тем же кортежем (Item_id, Date, Status), если первичным ключом является (Item_id, Date, Status). Например, было бы невозможно различить 2 строки, если они обе идентифицированы одним и тем же кортежем (1, 2018-01-01, «отменено»)

Похоже, что вы хотите применить одну completed строку на кортеж (item_id, date), что выполнимо: см. этот вопрос . Вам нужно будет добавить в таблицу столбец первичного ключа.

...