SQL 外键数组引用非数组

标签 sql postgresql

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/

相关文章:

sql - 在 postgres 查询中使用 ANY 时,有没有办法保留顺序或数组?

MySQL - 为列表中的每个 ID 选择 2 个最后一个元素

sql - SQL建表时如何指定输入格式?

python - 重用游标与创建新游标的权衡是什么?

SQL Server 读取带有外键的列时出现问题

database - 在PostgreSQL中获取lobject的大小

javascript - Sequelize : Using include in a model that represents an association table between two other models

postgresql - 对称 DS 字节阈值

postgresql - postgres 枚举与 golang pgx

java - 如何根据用户插入的月数计算预计日期?