CREATE TABLE orders (
id SERIAL PRIMARY KEY,
productid INTEGER[] NOT NULL,
amount INTEGER[] NOT NULL,
totalprice FLOAT NOT NULL,
ordertime TIMESTAMP NOT NULL,
FOREIGN KEY (productid) REFERENCES products(id)
);
我试图创建一个表来记录订单。由于一个订单可能包含多个产品,我打算用一个数组来记录每个产品的productids,和amount一样。但是,当我想使 productid 成为引用表 product 的 id 属性的外键时,我发现 productid 是一个数组,但 products(id) 只是一个数字。我怎样才能解决这个问题,使 productid 数组的每个元素都引用 products(id)?我正在使用 postgresql 顺便说一下。
感谢广告!
最佳答案
此时 PostgreSQL 不支持外键数组。
建议支持 PostgreSQL 9.4,但性能和实现质量问题导致其从该版本中删除。它可能会在未来的版本中添加,也可能不会。截至 9.6,我没有看到任何人在处理它。
您不能改用CHECK
约束,因为它们不支持子查询、FROM
子句或对其他列的引用表。虽然可以通过编写一个函数来隐藏其他表的查询然后在 CHECK
表达式中使用该函数来欺骗解析器,但这是不正确的并且不能可靠地工作.
我强烈建议改为规范化表格,这样您就可以使用多个单独的记录而不是数组。
关于SQL 外键数组引用非数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331335/