postgresql中的id与多行的数组

时间:2017-08-12 17:49:12

标签: mysql postgresql

我来自老派的mysql,并且很惊讶postgresql可以做数组。

过去,我们假设您有UserFruit个表格。每个用户可以有多个水果。为了存储每个用户拥有的水果,我们需要创建第三个表来存储用户和水果ID。

但似乎PostgreSQL可以在fruits中添加一列User来存储Fruit.id数组。

我的问题是,哪一个更好?在性能和可能的未来扩展方面。

1 个答案:

答案 0 :(得分:1)

这取决于您想要对数据做什么。但是,对于您给出的示例,在大多数情况下,联结表是更好的方法。说:

create table UserFruits (
    UserFruitId serial primary key,
    UserId int references users(UserId),
    FruitId int references fruits(FruitId)
);

为什么呢?因为您可以显式声明外键关系,并且数据库将在输入数据时验证数据。此外,您可能希望在联结表中包含其他信息,例如添加水果的日期/时间或价格。

如果您有其他类型的列表 - 例如与其他表无关,而只是列表 - 那么使用数组可能很有意义。从性能角度来看,这取决于您要对列表执行的操作。但是出于许多目的,如果需要关注的话,阵列会更快。