在给定以下数据的情况下,尝试找出为用户设置集合“列表”的最佳方法(伪代码):
user table = id, name, email
cars table = id, make, model
user_cars table = user_id, car_id, rating
collections table = id, user_id, name
事实:
用户可以拥有多辆汽车
用户可以拥有多个馆藏
个别车可以在很多系列中
我看到允许用户拥有集合列表的2个选项是向user_cars添加一个名为collection_list
的字段,并使该字段的内容成为用户拥有的集合的逗号列表,如:1,30,400
或添加一个名为collection_entries
的附加表,其中包含collection_id
和car_id
,每个表都指向各自的collections.id和cars.id.我在添加另一个表时看到的可能问题是该表中的行数会变得很大。例如:10,000个用户x 10个集合,每个集合100个车辆= 100万行。
想法?
答案 0 :(得分:1)
如果我理解正确,集合中只有1个拥有者?
所以:
users: user_id, name
cars: car_id, name
collection_cars: collectioncar_id, collection_id, car_id
collections: collection_id, user_id, name
因此,对于每个集合,您可以在单独的表中存储哪些车辆。如果正确使用索引,我认为100万行不会是一个大问题。 我不认为放弃一个好的数据库设计是一个好主意,因为你害怕有很多行。数据库旨在处理大型数据集,因此您可以使用它们。其次;如果您为每个用户存储他们拥有的汽车,您还必须存储该汽车所属的集合,这样您就无法获得任何收益。
答案 1 :(得分:1)
您的第二个选项称为交叉表:
交叉表,第三个, 创建的中间表 实现多对多关系 两个实体之间。也称为 结,中间或分辨率 表。两个主键 实体被放置在 交叉表作为外键。 通常这两个形成复合 主键。
您肯定想要使用第二个选项。这对于查询设计和在客户端上使用resultSets更好。只要正确完成索引,大多数数据库都足以处理此设计。