我有一个参考表,例如OrderType
,它收集不同类型的订单:
CREATE TABLE IF NOT EXISTS OrderType (name VARCHAR);
ALTER TABLE OrderType ADD PRIMARY KEY (name);
INSERT INTO OrderType(name) VALUES('sale-order-type-1');
INSERT INTO OrderType(name) VALUES('sale-order-type-2');
INSERT INTO OrderType(name) VALUES('buy-order-type-1');
INSERT INTO OrderType(name) VALUES('buy-order-type-2');
我希望从另一个表(例如SaleInformation)创建指向该表(OrderType)的FK约束。然而,我想表达的是并非所有OrderType行都符合该FK的目的(它应该只与销售相关的订单类型相对应)。
我考虑创建OrderType表的视图,只包含正确类型的行(视图为SaleOrderType),并将FK约束添加到该视图中,但是PostgreSQL会阻止此操作,提示:
ERROR: referenced relation "SaleOrderType" is not a table
看起来我无法创建一个外键约束到一个视图(为什么?)。我的选择只剩下创建一个冗余的表来保存销售相关的订单类型吗?另一个选择是允许外键指向原始表,但这样做并没有严格表达我的限制。