Users
我正在尝试为我的应用程序创建一个数据库,我想找到最好的方法是在我的表和表之间创建一对多的关系Items
。
我知道我可以创建第三个表,ReviewedItems
并让列成为User
id 和Item
id,但我想知道是否可以在 中创建列Users
,比如说reviewedItems
,这是一个包含外键的整数Items
数组已User
审查。
如果 PostgreSQL 可以做到这一点,请告诉我!如果没有,我会沿着我的第三桌路线走。
Users
我正在尝试为我的应用程序创建一个数据库,我想找到最好的方法是在我的表和表之间创建一对多的关系Items
。
我知道我可以创建第三个表,ReviewedItems
并让列成为User
id 和Item
id,但我想知道是否可以在 中创建列Users
,比如说reviewedItems
,这是一个包含外键的整数Items
数组已User
审查。
如果 PostgreSQL 可以做到这一点,请告诉我!如果没有,我会沿着我的第三桌路线走。
很快就有可能做到这一点: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 内部结构,请尽可能提供帮助。
不,这是不可能的。
PostgreSQL 是一种关系型 DBMS,在正确规范化的数据模型上运行效率最高。数组——根据定义,它们是有序集合——不是关系数据结构,因此 SQL 标准不支持在数组元素上定义外键,PostgreSQL 也不支持。
但是,您可以构建一个完美的数据库,其中数组元素链接到其他表中的主键。但是,这些数组元素不能声明为外键,因此 DBMS 将不会保持引用完整性。