2010-03-01 44 views
12

我希望能够跟踪我的网站上赚取的用户积分。它并不是真的如此,但点系统是类似的,我希望每个用户都有一个总数,然后我想跟踪让他们达到这个总数的事务。保持跟踪用户点(像这样)

我应该在用户表中保留一个用户总数还是应该将所有影响用户问题的交易总数都计算在内,然后求和并显示总分数?

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

什么是正确的设计方式?

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

回答

9

两个

你必须重新计算总计当事情出错的方式,比如说你添加新的功能,或者是有人学会利用系统。您可以在用户表和交易记录上保留当前总计,以便在需要时重新计算总计......不是每次需要显示该值时。

您不会重复存储重复数据以至于审计历史记录再次出现,唯一的重复项是用户表格上一列中的一个数字......替代方案是用户利用系统,没有办法将其卷回。同样的事情发生在SO的早期,但他们有历史,可以在没有汗水的情况下重新计算总计。

+0

有人会采取这种方法的系统,可以为每个用户每天生成数百交易?例如,您可以跟踪经验点或黄金的游戏。这些是人们可能试图利用的频繁事件,但是存储这些许多事务看起来好像会扩大数据库的大小。 – 2010-03-02 00:50:29

+0

@Zachary - 硬盘空间大约是最便宜的服务器资源,在大多数情况下,记录的数据并不是那么多。看看SO,每天都有很多交易,但是当你像WOW所说的那样处理事情时,你说的是一个独特的高规模。在这种情况下,可能需要采取不同的方法,可能每个月都会记录总量,只保留3个月的数据或某些内容,以便在发生突变时有一定的回滚能力等等。 – 2010-03-02 00:57:52

3

你可能应该混合使用两者。

在用户表上保留一个运行总数,并且保存每个事务的日志影响用户总数,这样你就不需要做所有记录的总和,但是你只需要案件。

这些数字可能不同步,这就是为什么您可能需要不时进行重新计算。 (StackOverflow称它为recalc,他们在那里通过并将你的声望更新为你应该拥有的)。