我的数据库中有一个(巨大的)项目列表,我的用户(也很多)能够说出他们是否喜欢每个项目,我需要在数据库中保留这些信息。
我的问题是什么是最好的设计:
一个表,每个用户的每个项目都有两个布尔列'喜欢'和'不喜欢'(非常巨大)
两个表,一个用于用户喜欢,一个用户不喜欢(不太大的表,但需要进行额外的连接)
也许是另一种我没想过的方式
基本上,就性能而言,最好是拥有一个非常庞大的表(items * users),还是将它分成两个表并使用连接?
答案 0 :(得分:1)
选项#1,但不喜欢和不喜欢相互排斥?
在这种情况下,为什么不喜欢具有item-id,user-id的单个表。如果用户/项目在表格中,您就知道是否设置了喜欢/不喜欢。如果用户/项目不在表格中,则表示尚未设置
表变得很大,但如果它被正确索引,那就不是问题了。
答案 1 :(得分:1)
您应该从设计功能开始,然后调整性能。您是否有任何需要访问这两组信息的查询(例如,计算" net likes"给出了一个主题)?如果是这样,这将建议一个表。由于用户不能同时喜欢和喜欢某个主题,因此对当前建议的改进可能只是一个布尔列 - true
可以指示"喜欢"和false
a"不喜欢"。通过这种方式,您可以对其进行索引,甚至可以对其进行分区,以提高性能。