每个元素都是外键的 PostgreSQL 数组
PostgreSQL array of elements that each are a foreign key
我正在尝试为我的应用程序创建一个数据库,我想找到最好的方法是在我的 Users
和 [=11= 之间创建一对多关系] tables.
我知道我可以创建第三个 table、ReviewedItems
,并将列设置为 User
id 和 Item
id,但我想要要知道是否可以在 Users
中创建一个列,比方说 reviewedItems
,它是一个包含 Items
的外键的整数数组,User
已审查。
如果 PostgreSQL 可以做到这一点,请告诉我!如果没有,我就走我的第三条 table 路线。
不,这不可能。
PostgreSQL 是一个关系 DBMS,在适当规范化的数据模型上运行最有效。数组——根据定义,它们是有序集合——而不是关系数据结构,因此 SQL 标准不支持在数组元素上定义外键,PostgreSQL.
也不支持
但是,您可以使用链接到其他表中的主键的数组元素构建一个完美的数据库。但是,这些数组元素不能声明为外键,因此 DBMS 将无法保持参照完整性。
可能很快就可以做到这一点: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 内部原理的人请尽可能提供帮助。
我正在尝试为我的应用程序创建一个数据库,我想找到最好的方法是在我的 Users
和 [=11= 之间创建一对多关系] tables.
我知道我可以创建第三个 table、ReviewedItems
,并将列设置为 User
id 和 Item
id,但我想要要知道是否可以在 Users
中创建一个列,比方说 reviewedItems
,它是一个包含 Items
的外键的整数数组,User
已审查。
如果 PostgreSQL 可以做到这一点,请告诉我!如果没有,我就走我的第三条 table 路线。
不,这不可能。
PostgreSQL 是一个关系 DBMS,在适当规范化的数据模型上运行最有效。数组——根据定义,它们是有序集合——而不是关系数据结构,因此 SQL 标准不支持在数组元素上定义外键,PostgreSQL.
也不支持但是,您可以使用链接到其他表中的主键的数组元素构建一个完美的数据库。但是,这些数组元素不能声明为外键,因此 DBMS 将无法保持参照完整性。
可能很快就可以做到这一点: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 内部原理的人请尽可能提供帮助。