В моей базе данных PostgreSQL у меня есть следующие таблицы (упрощенные):
CREATE TABLE quotations ( receipt_id bigint NOT NULL PRIMARY KEY ); CREATE TABLE order_confirmations ( receipt_id bigint NOT NULL PRIMARY KEY fk_quotation_receipt_id bigint REFERENCES quotations (receipt_id) );
Моя проблема теперь выглядит следующим образом:
У меня есть заказы, которые относятся к предыдущим предложениям (что хорошо, потому что я могу приложить такой порядок к цитате, на которую ссылается использование поля FK), но у меня также есть упорядоченные заказы без подходящая цитата. Поле FK тогда было бы NULL, если бы база данных позволяла мне, конечно. К сожалению, я получаю ошибку при попытке установить fk_quotation_receipt_id в NULL в инструкции INSERT из-за ограничения внешнего ключа.
При разработке этих таблиц я все еще использовал PgSQL 8.2, что позволило использовать значения NULL. Теперь у меня 9.1.6, что не позволяет этого.
Я бы хотел, чтобы необязательный (или нулевой) ограничение внешнего ключа order_confirmations (fk_quotation_receipt_id) → цитаты (квитанция_ид). Я не могу найти никаких намеков в официальных документах PgSQL, и подобные проблемы, выпущенные пользователями, уже довольно стары.
Спасибо за полезные подсказки.