我来自老派的mysql,并且很惊讶postgresql可以做数组。
过去,我们假设您有User
和Fruit
个表格。每个用户可以有多个水果。为了存储每个用户拥有的水果,我们需要创建第三个表来存储用户和水果ID。
但似乎PostgreSQL可以在fruits
中添加一列User
来存储Fruit.id
数组。
我的问题是,哪一个更好?在性能和可能的未来扩展方面。
答案 0 :(得分:1)
这取决于您想要对数据做什么。但是,对于您给出的示例,在大多数情况下,联结表是更好的方法。说:
create table UserFruits (
UserFruitId serial primary key,
UserId int references users(UserId),
FruitId int references fruits(FruitId)
);
为什么呢?因为您可以显式声明外键关系,并且数据库将在输入数据时验证数据。此外,您可能希望在联结表中包含其他信息,例如添加水果的日期/时间或价格。
如果您有其他类型的列表 - 例如与其他表无关,而只是列表 - 那么使用数组可能很有意义。从性能角度来看,这取决于您要对列表执行的操作。但是出于许多目的,如果需要关注的话,阵列会更快。