Sql 如何创建一个数组来存储主键?

Sql 如何创建一个数组来存储主键?,sql,arrays,postgresql,database-design,foreign-keys,Sql,Arrays,Postgresql,Database Design,Foreign Keys,我有3个表(用户、链接和链接列表),我想将用户ID及其链接ID存储在一个数组中。但是,当我尝试下面的代码时,会出现以下错误: 不兼容的类型:整数[]和整数 是否有任何方法可以将用户id和链接id数组存储在表中 CREATE TABLE Users ( id serial primary key not null, email varchar(64) unique not null, ); CREATE TABLE Links ( id serial primary ke

我有3个表(用户、链接和链接列表),我想将用户ID及其链接ID存储在一个数组中。但是,当我尝试下面的代码时,会出现以下错误:

不兼容的类型:整数[]和整数

是否有任何方法可以将用户id和链接id数组存储在表中

CREATE TABLE Users (
    id serial primary key not null,
    email varchar(64) unique not null,
);

CREATE TABLE Links (
    id serial primary key not null,
    name varchar(64) not null
);

CREATE TABLE LinkLists(
    user_id integer unique not null REFERENCES Users(id),
    links integer [] REFERENCES Links(id) -- problem here --
);
示例:

用户表*

1 example@gmail.com
链接表

1 google.com
2 twitter.com
链接列表表

1 [1,2] 

可能您不需要链接列表表上的数组数据类型

您只需要两个外键

CREATE TABLE LinkLists(
    user_id integer unique not null REFERENCES Users(id),
    links integer not null REFERENCES Links(id) 
);
根据我的说法,您不需要第三个表:链接列表

在链接表上定义用户id FK并引用用户

或者最好的方法是,使用一个树状视图表,包括您自己的引用,实际上您可以这样做! 只需在users表中添加一个新的数组类型字段。并为users表定义插入后触发器函数

并通过CTE更新数组字段


我成功地使用了这种方法。

当引用外键时,两个表中的类型必须是identical@JaimeDrq我完全知道这一点。但是,我也知道可以创建一个数组元素链接到主键。我该怎么做?外键不能和数组一起使用。首先,将ID存储在阵列中不是一个好的数据库设计(例如,您无法轻松防止阵列中的重复)。使用适当设计的多对多表是这里更好的选择。可能重复感谢您的建议,但需要有第三张表。所以你的方法是有道理的,但是我们不能创建一个数组来保存主键吗?你应该删除
unique
。并在两列上添加主键。