Таблица должна иметь поведение, аналогичное первичному ключу (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')
Есть ли способ использовать ограничение или другую реализацию для достижения этой цели?
Вопрос в том, как структурировать таблицу для достижения такого поведения.
Ну тогда stackoverflow.com/questions/1110349/…
Должно быть разрешено несколько статусов «отмена» с одинаковыми Item_id и Date.
Попался. Смотри мой ответ
Привет. Вы правильно указали данные в своих таблицах и вставках? Ваш пример нарушает ПК, первые 2 строки одинаковы. Вы не можете вставить строку, о которой говорите успешно, она уже есть. Кроме того, уточняйте, редактируя записи, а не комментарии. И ваш комментарий «Должен быть разрешен множественный статус отмены с одинаковыми Item_id и Date» не согласуется с вашим PK, в котором говорится только о том, что все 3 столбца должны быть уникальными.
То, что вы спрашиваете, противоречит самому себе. Первичный ключ по определению уникален, поэтому невозможно иметь несколько строк с одним и тем же кортежем (Item_id, Date, Status), если первичный ключ (Item_id, Date, Status). Например, не будет возможности различить 2 строки, если они обе идентифицируются одним и тем же кортежом (1, 2018-01-01, 'отменено')
Похоже, вы хотите применить одну строку completed
для каждого кортежа (item_id, date), что выполнимо: см. этот вопрос. Вам нужно будет добавить в таблицу столбец первичного ключа.
Не могли бы вы поделиться структурой таблицы? Как это было создано?