Database design 如果我允许用户投票,只要他们是注册用户。。。还可能出现什么其他问题?

Database design 如果我允许用户投票,只要他们是注册用户。。。还可能出现什么其他问题?,database-design,voting,Database Design,Voting,假设我只允许注册用户投票。 我应该限制每个用户在每篇文章中只投票一次? 我应该维护一个包含4列的表——articleid、userid、bit(表示正/负)和datetime列 你还看到这个被滥用吗 为了获得净评级,我将查询该表两次——一次统计所有正面投票,一次统计所有负面投票 请告诉我您看到的我的方法中的任何缺陷/优化 保持对注册用户的投票避免滥用,通过不同的IP地址撤销投票 要获得净评级,您需要查询一次表格,将所有投票相加,或者更好的是,您需要对最终投票的每个项目进行统计。投票一次意味着你增

假设我只允许注册用户投票。 我应该限制每个用户在每篇文章中只投票一次?
我应该维护一个包含4列的表——articleid、userid、bit(表示正/负)和datetime列

你还看到这个被滥用吗

为了获得净评级,我将查询该表两次——一次统计所有正面投票,一次统计所有负面投票


请告诉我您看到的我的方法中的任何缺陷/优化

保持对注册用户的投票避免滥用,通过不同的IP地址撤销投票

要获得净评级,您需要查询一次表格,将所有投票相加,或者更好的是,您需要对最终投票的每个项目进行统计。投票一次意味着你增加或减少项目的评级


编辑:我必须坚持,如果可以预先计算多个表,那么查询多个表是不好的做法。打破关系模型是数据库优化的一个重要部分。

限制对注册用户的投票是避免可能的滥用的方法。但是,一旦用户投票,您可能需要考虑他们是否可以撤消投票。我相信这种情况不会经常发生,但需要考虑一下

顺便说一句,您不需要两次查询数据库,因为您可以通过group by查询获得这两个值,如下所示:

SELECT Vote, COUNT(Vote)
FROM tVotes
GROUP BY Vote, ArticleID
HAVING ArticleID = 1

我不太确定我是否理解上下文…所以还有一些其他优化,比如在一段时间后禁止更改投票更改…您试图实现什么?这似乎是DB表设计。添加与DBSO相关的标签是否禁止投票更改?基本上,如果我写一篇文章,我希望人们投赞成票/反对票,但我想确保投票不会被滥用。你可能会发现SO的数据模型很有用:这里的技术解释:啊,我明白了。因此,只有当用户投票以确保他/她之前没有投票支持本文时,我才会查看我的表格,这听起来合理吗?是的。这样,当你打印出你的文章列表时,你就不需要扫描整个投票表来计算所有的东西。我非常确定,所以也有一个用户表,其中包含TotalUpVotes和TotalDownVotes列,它们也是以同样的方式完成的。