17

我将为 Web 应用程序创建一个投票系统,并想知道将投票存储在 (SQL) 数据库中的最佳方式是什么。

投票系统类似于 StackOverflow 的投票系统。我现在正在考虑是否应该将赞成票和反对票存储在不同的表格中。这样就更容易计算所有的选票。否决票。另一方面,我必须查询两个表来查找用户或投票项目的所有投票。

另一种选择是一个带有布尔字段的表,该字段指定此投票是赞成票还是反对票。但是我猜想加票或减票是很慢的(当你有很多票时),并且布尔字段上的索引(据我所知)没有多大意义。

您将如何创建数据库结构?一张还是两张桌子?

4

4 回答 4

18

关于评论,我们找到了最适合Zardoz的解决方案

他不想总是计算选票,需要尽可能多的细节。所以解决方案是两者的混合。

  1. 在考虑的表中添加一个整数字段来存储投票计数(确保不会溢出)。
  2. 创建额外的表格来记录投票(用户、帖子、日期、上/下等)

我建议在日志表中插入/删除/更新投票时使用触发器自动更新“投票计数字段”。

于 2010-12-10T00:34:11.083 回答
12

如果您的投票只是向上/向下,那么您可以制作一个votes链接到帖子的表格,其值为1 或 -1(向上/向下)。这样一来,您就可以sum一次完成。

于 2010-12-10T00:00:59.540 回答
1

我会认为,您将需要用户和正在投票的实体之间的链接表。这将允许您查看哪些用户已经投票并阻止他们提交进一步的投票。该表可以用布尔值记录是赞成票还是反对票。

我建议在投票实体中存储一个当前投票计数字段以方便查询。如果你省略了这个,节省的大小将是微不足道的。

于 2010-12-09T23:49:14.690 回答