跟踪用户点(如SO)

时间:2010-03-01 23:37:21

标签: c# asp.net sql

我希望能够跟踪我网站上获得的用户积分。它不是真的像SO,但点系统是相似的,因为我希望每个用户都有一个总数,然后我想跟踪那些得到它们的交易。

我应该在用户表中保留一个用户总数,还是应该在问题总数中拉出影响用户的所有交易,将它们相加并显示总点数?

似乎后者比完成总计需要做的工作更多。但是,我再次强调在两个不同的地方保持相同数据(或多或少)的想法。

设计这个的正确方法是什么?

编辑:接受建议。使用和recalcs。我添加了一个RecalcDate列,如果它超过一天,它会被重新调整。每次用户做一些应该影响其总分的事情时,总数也会重新计算。

2 个答案:

答案 0 :(得分:9)

<强>两个

当出现问题时,您需要有一种重新计算总计的方法,比如添加新功能,或者有人学会利用系统。您可以在用户表上保留当前总计和事务记录,以便在需要时重新计算该总计...不是每次需要显示该值时都是。

您不会将重复数据存储到审计历史记录中,唯一的重复是User表中一列中的一个数字...替代方案是用户利用系统,没有办法滚回去。同样的事情发生在SO的早期,但他们有历史,可以毫不费力地重新计算总数。

答案 1 :(得分:3)

你应该把它们混合起来。

在User表上保持运行总计,并保留每个影响用户总数的事务的日志,这样您就不需要对所有记录进行总和,但是为了以防万一,您将拥有它们

这些数字可能会不同步,这就是您可能需要偶尔进行重新计算的原因。 (StackOverflow将其称为recalc,在那里他们通过并将您的声誉更新为您应该拥有的内容。)