实施排名系统

时间:2009-06-29 08:52:58

标签: mysql database-design voting-system

我已经看到了几个关于如何保护和防止滥用排名系统(如盯着电影,产品等)的问题,但实际上并没有实现它。为了简化这个问题,我不担心安全问题,访问该系统的人都是可信任的,如果发生这种情况,滥用排名系统是微不足道的,并且比原因更容易回复。无论如何,我很好奇如何存储选票。

一个想法是有一个投票表,记录每个投票,然后立即,在预定的时间,或在产品的每次加载(这似乎效率低,但可能不是),投票得到统计,两者之间0和5将更新到产品表中的产品条目中。

或者,我在产品表中存储总分和投票数,并在我显示时将其除去,并在有人投票时将投票添加到总数和增量数。

或者有没有更好的方法来做到这一点我没有?我想在产品表中只有一个“评级”字段,但如果没有一些额外的数据,就无法想出更新投票的方法。

同样,数据完整性很重要,但绝不是必要的,任何想法?

3 个答案:

答案 0 :(得分:1)

我会对你的产品保持“得分”,但也会保留一张投票表,看谁投票给了什么。当有人投票时,插入投票,更新产品分数。

这允许快速排序,你还有一个表格,可以重新计算分数,并阻止人们进行双重投票。

无需等待撰写投票并更新分数。 引入问题,如果它像传统系统一样(读取次数多于写入次数),则不会给您带来任何好处。

答案 1 :(得分:0)

你的意思是,你会将投票单独存储在一个表格中,然后用定义的策略更新产品表中产品的相应排名? 这似乎是一种低效的存储方式。也许有这个原因的背景;但是你为什么不想把所有的选票存放在一张桌子上,并继续将这些选票的参考文献提交给各自的产品。这为您提供了实时计数。

在UI上,您将计算所有投票的平均值,以显示近似整数。那就够了,不是吗?或者我错过了什么?

答案 2 :(得分:0)

我同意奥利。此外,您可以缓存您的分数。因此,您在缓存中更新产品分数,您的应用程序始终会获取缓存值。因此,即使在页面刷新时,您也可以在不访问数据库的情况下获得最新分数。