在我的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,当然,如果数据库允许的话。不幸的是,我在INSERT语句中尝试将fk_quotation_receipt_id
设置为NULL时得到错误,因为违反了外键约束。
在设计这些表的时候,我还在使用PgSQL8.2,它允许NULL值,而现在我使用的是9.1.6,它不允许NULL值。
我希望的是一个**可选(或可空)**外键约束order_confirmations
(fk_quotation_receipt_id
)→ quotations (receipt_id)
。我在官方的PgSQL文档中找不到任何提示,其他用户发布的类似问题已经很老了。
谢谢你的任何有用的提示。
2条答案
按热度按时间hs1rzwqc1#
我在9.3中纠正了一个遗漏的逗号,我相信它在9.1中也能正常工作
Confirmation将包括:
hi3rlvi22#
我一直在努力记住这个例子,所以下面的原子例子可以帮助我记住:
如果你想禁止null的情况,那么它与外键无关,而是与列的声明有关**(观察新来的
not null
部分)**:PS:大写字母保留字会降低SQL的可读性,请使用小写字母。