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