gpt4 book ai didi

mysql - 跨表与存储列表的 "has many"问题的数据库设计

转载 作者:行者123 更新时间:2023-11-29 09:21:24 24 4
gpt4 key购买 nike

尝试找出为给定以下数据的用户设置集合“列表”的最佳方法(伪代码):

user table = id, name, email

cars table = id, make, model

user_cars table = user_id, car_id, rating

collections table = id, user_id, name

事实:

  • 用户可以拥有多辆车

  • 用户可以拥有多个收藏

  • 单辆汽车可以有多个收藏

我看到的允许用户拥有集合列表的两个选项是向 user_cars 添加一个名为 collection_list 的字段,并将该字段的内容设为逗号分隔的集合列表,用户拥有,例如:1,30,400

或者添加一个名为collection_entries的附加表,其中包含collection_idcar_id,每个表都指向各自的collection.id和汽车。 ID。我发现添加另一个表时可能出现的问题是该表中的行数会变得很大。例如:10,000 个用户 x 每个集合 10 个集合 x 每个集合 100 辆汽车 = 100 万行。

想法?

最佳答案

如果我理解正确的话,一个集合恰好有 1 个所有者?

所以:

users: user_id, name

cars: car_id, name

collection_cars: collectioncar_id, collection_id, car_id

collections: collection_id, user_id, name

因此,对于每个集合,您将其中的汽车存储在单独的表中。如果你正确使用索引,我认为 100 万行不会是一个大问题。我认为放弃良好的数据库设计通常不是一个好主意,因为您害怕有很多行。数据库旨在处理大型数据集,因此您可以使用它们。第二;如果您为每个用户存储他们拥有的汽车,您还必须存储该汽车属于哪个集合,因此您不会获得任何东西。

关于mysql - 跨表与存储列表的 "has many"问题的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1631853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com