如何创建存储主键的数组?

时间:2019-06-08 21:48:00

标签: sql arrays postgresql database-design foreign-keys

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

不兼容的类型:integer []和integer

有什么方法可以在表中存储user_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] 

2 个答案:

答案 0 :(得分:2)

可能您在LinkList表上不需要数组数据类型。

您只需要两个外键。

CREATE TABLE LinkLists(
    user_id integer unique not null REFERENCES Users(id),
    links integer not null REFERENCES Links(id) 
);

据我说,您不需要第三张表:LinkLists

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

或者最好的方法,使用树形视图表,包括引用自身

答案 1 :(得分:-1)

实际上您可以做到! 只需在users表中添加一个新的数组类型字段。并为用户表定义一个插入后触发函数。

并通过CTE更新数组字段。

我正在成功使用该方法。