PostgreSQL数组元素,每个元素都是一个外键

时间:2016-12-09 06:41:24

标签: postgresql foreign-keys foreign-collection

我正在尝试为我的应用创建数据库,我想找到最好的方法就是在Users和{{1}之间创建一对多的关系} tables。

我知道我可以制作第三个表格Items,并且列为ReviewedItems个ID和User个ID,但我想知道它是否&可以在Item中创建一个列,让我们说Users,这是一个整数数组,其中包含reviewedItems所具有Items的外键综述

如果PostgreSQL可以这样做,请告诉我!如果没有,我会沿着我的第三个路线走下去。

2 个答案:

答案 0 :(得分:31)

不,这是不可能的。

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

但是,您可以使用链接到其他表中主键的数组元素构建一个完美的数据库。但是,这些数组元素不能声明为外键,因此DBMS不会保持引用完整性。

答案 1 :(得分:31)

可能很快就可以这样做:https://commitfest.postgresql.org/17/1252/ - Mark Rofail在这个补丁上做了一些出色的工作!

补丁将(一旦完成)允许

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内部人员的人都可以提供帮助。