不平等的投票制度

Voting system with unequal votes

本文关键字:投票制 不平等      更新时间:2023-09-26

我打算在我的webapp (reactJs, flux, nodejs + express server)中实现投票系统

许多用户(成千上万)可以投票,他们的投票是不平等的。从1到100。他们可以投票支持或反对。我需要对数据库中的所有选票进行算术平均。我有上千页关于投票系统的资料。我如何实现它?我想,我可以存储所有的选票从每个页面在一个单元格的数据库表。当我需要在前端渲染平均投票时,我将检索json对象,如:

{ page1: [1,22,5,7,32,...~1000 more numbers] }

,并在客户端使用js计算算术平均值。

这是个好主意吗?也许还有别的办法?

在这种情况下不会丢失谁投了什么票之间的关系?

我更愿意将投票存储在引用用户投票、投票元素和投票值的多对多表中。

当您想要显示平均值时,一个快速的Sql查询可以返回算术平均值。

但除此之外,你可以知道更多关于用户投票行为的信息(总是投票最大值或最小值的用户,在某些项目上投票的用户,而在其他项目上做相反的用户,投票某些项目但不投票其他项目的用户……和一个巨大的等等)。

考虑到这些数据,您可以实现比简单平均值更可靠的投票值…但这完全是两码事。

如果按照您所描述的那样存储每个页面的所有投票,那么您可能会在跟踪谁投票了谁没有投票时遇到麻烦。我建议使用一个简单的映射表。

Table 1:
UserID (int), NumberOfVotes (int)
Table2:
PageID (int), UserID (int), ForOrAgainst (binary 1=for, 0=against)

然后计数投票,你可以简单地连接表和SUM(NumberOfVotes),并减去SUM(NumberOfVotes)对给定的PageID。

下面是一个SQLFIDDLE,它对给定页面的投票进行求和。注意,您还需要第二个查询(或两个子查询)来获得AGAINST的投票。