sql – 存储/计算用户分数的最佳方法是什么?
我希望为一个网站设计一个数据库,用户可以通过该数据库获得执行某些活动的积分(声誉),并且正在努力应对数据库设计. 我打算保留用户所做事情的记录,这样他们可能会为他们提交的项目获得25分,每个他们所做的30条评论获得1分,还有10个奖励积分非常棒! 很明显,所有的数据都会存在,但似乎很多或者要查询每个用户的总得分,我想在他们的用户名旁边显示(以一个级别的形式).例如,对提交的项目表的查询以获取该用户的每个项目的分数,对评论表的查询等.如果需要对页面上提到的每个用户完成所有这些….大量的查询! 我曾经考虑过在用户表中保留一个分数,这看起来要快得多,但是我已经知道存储可以从其他数据计算的数据是很糟糕的! 我已经看到很多网站做类似的事情(甚至堆栈溢出也类似)所以我认为必须有一个“最佳实践”.任何人都可以建议它可能是什么? 任何建议或意见都会很棒.谢谢! 最佳答案 我认为这绝对是一个很好的问题.我必须构建具有类似行为的系统 – 特别是当经常访问具有分数的表时(如在您的场景中).这是我对你的建议:首先,创建一些如下所示的表(我使用的是SQL Server最佳实践,但是如果您认为合适,请将它们命名):
完成此操作后,继续创建一个类似于以下内容的视图(不,我没有验证过这个SQL,但它应该是一个好的开始):
我知道你已经提到了一些关于性能和大量查询的问题,但是如果你构建一个这样的视图,你将不需要多个.我建议不要将其视为物化视图;相反,只需索引您的表,以便您需要的查找(实际上是UserAccountGuid)将实现表中的快速求和. 我将再添加一点 – 如果您的UserAccount表变得庞大,您可以考虑一个稍微更智能的查询,其中包含您需要进行汇总的帐户名称.这样,当您只在页面上显示3-10个用户的信息时,就不会将大量数据集返回到您的网站.我不得不考虑更多关于如何优雅地做到这一点,但我建议远离“IN”语句,因为这将调用表的线性搜索. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |