数据库设计:记住用户选择的一个或两个表

时间:2014-11-14 14:58:09

标签: database postgresql database-design

我的数据库中有一个(巨大的)项目列表,我的用户(也很多)能够说出他们是否喜欢每个项目,我需要在数据库中保留这些信息。

我的问题是什么是最好的设计:

  • 一个表,每个用户的每个项目都有两个布尔列'喜欢'和'不喜欢'(非常巨大)

  • 两个表,一个用于用户喜欢,一个用户不喜欢(不太大的表,但需要进行额外的连接)

  • 也许是另一种我没想过的方式

基本上,就性能而言,最好是拥有一个非常庞大的表(items * users),还是将它分成两个表并使用连接?

2 个答案:

答案 0 :(得分:1)

选项#1,但不喜欢和不喜欢相互排斥?

在这种情况下,为什么不喜欢具有item-id,user-id的单个表。如果用户/项目在表格中,您就知道是否设置了喜欢/不喜欢。如果用户/项目不在表格中,则表示尚未设置

表变得很大,但如果它被正确索引,那就不是问题了。

答案 1 :(得分:1)

您应该从设计功能开始,然后调整性能。您是否有任何需要访问这两组信息的查询(例如,计算" net likes"给出了一个主题)?如果是这样,这将建议一个表。由于用户不能同时喜欢和喜欢某个主题,因此对当前建议的改进可能只是一个布尔列 - true可以指示"喜欢"和false a"不喜欢"。通过这种方式,您可以对其进行索引,甚至可以对其进行分区,以提高性能。