在像StackOverflow这样的网站中,问题及其投票应该是单独的表吗?

时间:2009-06-12 04:11:36

标签: sql database database-design

我在Rails中创建了一个类似StackOverflow的网站,但我不确定问题上的投票是否有必要存储在数据库的单独表中。

有没有充分理由分开数据?

或者我可以将投票作为一个总和存储在问题表的字段中吗?

6 个答案:

答案 0 :(得分:5)

如果用户在不保留投票表的情况下对某个问题进行投票,您怎么知道?或者像这个每天让你获得X票的网站,你怎么知道用户当天投了多少票呢?您如何跟踪用户做了多少次上下投票?我认为好的设计实践会让你很难对数据进行规范化并保留一个投票表,可能会在问题行中保留当前的+/-非规范化字段以便于获取。

答案 1 :(得分:5)

是的!从对象的角度考虑它。在模型驱动的开发(对象优先)中,您将拥有一个问题容器(表)和一个投票容器。当然,你可以简单地将它们卷成一个聚合形式。但是,通过这样做,您会丢失很多指标细节,例如谁投票,何时等等。这实际上取决于您是否需要细节。空间很便宜所以不保留细节通常不是一个好主意。很难预见未来需要什么!

答案 2 :(得分:1)

从多个方面考虑您的数据。除了票数以外,还有更多的事情要发生。有:

  • 谁投票
  • 当他们投票时
  • 对任意数目的政党投票的影响(如金融交易一样)

你能负担得起丢弃这些数据吗?你会不会需要它?在Stackoverflow中,必须知道我是否投票决定是否可以投票;投票是什么,所以我可以改变它;投票的效果如果我改变它就可以回滚;等

答案 3 :(得分:0)

投票也需要能够同时应用于问题和答案,尽管问题和答案都可以存储在名为Post或类似的一个表/类中,因为它们是具有不同标题的相同数据。 / p>

答案 4 :(得分:0)

就像最后两个答案所说:保持一个单独的投票表。

但建议创建一个视图,按每个用户,每个问题等聚合投票,以便在需要该信息时不需要进行手动查询。

JRH

答案 5 :(得分:0)

是的,我甚至会说,帮助减少一个人通过反复投票或反对投票来偏倚结果的可能性是至关重要的。

它实际上与OOP关系不大,更多的是与防止漏洞利用有关。

出于性能原因,您可以在问题表中使用静态投票计数,当问题的投票数据发生变化时,计数表会更新。我不会仅仅使用投票计数,除非你真的不关心特定人的偏见。