我正在尝试为我的应用创建数据库,我想找到最好的方法就是在Users
和{{1}之间创建一对多的关系} tables。
我知道我可以制作第三个表格Items
,并且列为ReviewedItems
个ID和User
个ID,但我想知道它是否&可以在Item
中创建一个列,让我们说Users
,这是一个整数数组,其中包含reviewedItems
所具有Items
的外键综述
如果PostgreSQL可以这样做,请告诉我!如果没有,我会沿着我的第三个路线走下去。
答案 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内部人员的人都可以提供帮助。