每个元素都是外键的 PostgreSQL 数组

我正在尝试为我的应用程序创建一个数据库,我想找到一个最好的方法是在我的 UsersItems表之间创建一对多的关系。

我知道我可以创建第三个表 ReviewedItems,并且列是 User id 和 Item id,但是我想知道是否可以在 Users中创建一个列,比如说 reviewedItems,它是一个包含 Items的外键的整数数组,User已经回顾过了。

如果 PostgreSQL 可以做到这一点,请让我知道! 如果不行,我将沿着我的第三个表的路线。

77329 次浏览

不,这不可能。

PostgreSQL 是一个 关系 DBMS,在正确规范化的数据模型上运行效率最高。根据定义,数组是有序集,而不是关系数据结构,因此 SQL 标准不支持在数组元素上定义外键,PostgreSQL 也不支持。

但是,您可以使用数组元素链接到其他表中的主键来构建一个非常好的数据库。然而,这些数组元素不能被声明为外键,因此 DBMS 将不会维护参照完整性。

它可能很快就可以做到这一点: https://commitfest.postgresql.org/17/1252/-马克罗费尔已经做了一些出色的工作在这个补丁!

补丁程序(一旦完成)将允许

CREATE TABLE PKTABLEFORARRAY (
ptest1 float8 PRIMARY KEY,
ptest2 text
);
CREATE TABLE FKTABLEFORARRAY (
ftest1 int[],
FOREIGN KEY (EACH ELEMENT OF ftest1) REFERENCES PKTABLEFORARRAY,
ftest2 int
);

然而,作者目前需要帮助重新基础的补丁(超出我自己的能力) ,所以任何人阅读这谁知道 Postgres 内部请帮助,如果你可以。