我希望能够跟踪我网站上获得的用户积分。它不是真的像SO,但点系统是相似的,因为我希望每个用户都有一个总数,然后我想跟踪那些得到它们的交易。
我应该在用户表中保留一个用户总数,还是应该在问题总数中拉出影响用户的所有交易,将它们相加并显示总点数?
似乎后者比完成总计需要做的工作更多。但是,我再次强调在两个不同的地方保持相同数据(或多或少)的想法。
设计这个的正确方法是什么?
编辑:接受建议。使用和recalcs。我添加了一个RecalcDate列,如果它超过一天,它会被重新调整。每次用户做一些应该影响其总分的事情时,总数也会重新计算。
答案 0 :(得分:9)
<强>两个强>
当出现问题时,您需要有一种重新计算总计的方法,比如添加新功能,或者有人学会利用系统。您可以在用户表上保留当前总计和事务记录,以便在需要时重新计算该总计...不是每次需要显示该值时都是。
您不会将重复数据存储到审计历史记录中,唯一的重复是User表中一列中的一个数字...替代方案是用户利用系统,没有办法滚回去。同样的事情发生在SO的早期,但他们有历史,可以毫不费力地重新计算总数。
答案 1 :(得分:3)
你应该把它们混合起来。
在User表上保持运行总计,并保留每个影响用户总数的事务的日志,这样您就不需要对所有记录进行总和,但是为了以防万一,您将拥有它们
这些数字可能会不同步,这就是您可能需要偶尔进行重新计算的原因。 (StackOverflow将其称为recalc,在那里他们通过并将您的声誉更新为您应该拥有的内容。)