143

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

我知道我可以创建第三个表,ReviewedItems并让列成为Userid 和Itemid,但我想知道是否可以在 中创建列Users,比如说reviewedItems,这是一个包含外键的整数Items数组已User审查。

如果 PostgreSQL 可以做到这一点,请告诉我!如果没有,我会沿着我的第三桌路线走。

4

2 回答 2

124

很快就有可能做到这一点: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 内部结构,请尽可能提供帮助。

于 2018-05-21T01:57:28.673 回答
97

不,这是不可能的。

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

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

于 2016-12-09T06:57:39.837 回答