sql– 存储计算用户分数的最佳方法是什么?

sql– 存储计算用户分数的最佳方法是什么?,第1张

概述我希望为一个网站设计一个数据库,用户可以通过该数据库获得执行某些活动的积分(声誉),并且正在努力应对数据库设计.我打算保留用户所做事情的记录,这样他们可能会为他们提交的项目获得25分,每个他们所做的30条评论获得1分,还有10个奖励积分非常棒!很明显,所有的数据都会存在,但似乎很多或者要查询每个用户的总得分,我想在他们的用户名旁边显示(以一个级别的形式).例

我希望为一个网站设计一个数据库,用户可以通过该数据库获得执行某些活动的积分(声誉),并且正在努力应对数据库设计.

我打算保留用户所做事情的记录,这样他们可能会为他们提交的项目获得25分,每个他们所做的30条评论获得1分,还有10个奖励积分非常棒!

很明显,所有的数据都会存在,但似乎很多或者要查询每个用户的总得分,我想在他们的用户名旁边显示(以一个级别的形式).例如,对提交的项目表的查询以获取该用户的每个项目的分数,对评论表的查询等.如果需要对页面上提到的每个用户完成所有这些….大量的查询!

我曾经考虑过在用户表中保留一个分数,这看起来要快得多,但是我已经知道存储可以从其他数据计算的数据是很糟糕的!

我已经看到很多网站做类似的事情(甚至堆栈溢出也类似)所以我认为必须有一个“最佳实践”.任何人都可以建议它可能是什么?

任何建议或意见都会很棒.谢谢!

最佳答案我认为这绝对是一个很好的问题.我必须构建具有类似行为的系统 – 特别是当经常访问具有分数的表时(如在您的场景中).这是我对你的建议:

首先,创建一些如下所示的表(我使用的是sql Server最佳实践,但是如果您认为合适,请将它们命名):

UserAccount          UserAchIEvement -GuID (PK)           -GuID (PK) -Firstname           -UserAccountGuID (FK) -Lastname            -name -EmailAddress        -score

完成此 *** 作后,继续创建一个类似于以下内容的视图(不,我没有验证过这个sql,但它应该是一个好的开始):

SELECT [UserAccount].[Firstname]      AS Firstname,[UserAccount].[Lastname]       AS Lastname,SUM([UserAchIEvement].[score]) AS TotalPointsFROM [UserAccount]INNER JOIN [UserAchIEvement]     ON [UserAccount].[GuID] = [UserAchIEvement].[UserAccountGuID]GROUP BY [UserAccount].[Firstname],[UserAccount].[Lastname]ORDER BY [UserAccount].[Lastname] ASC

我知道你已经提到了一些关于性能和大量查询的问题,但是如果你构建一个这样的视图,你将不需要多个.我建议不要将其视为物化视图;相反,只需索引您的表,以便您需要的查找(实际上是UserAccountGuID)将实现表中的快速求和.

我将再添加一点 – 如果您的UserAccount表变得庞大,您可以考虑一个稍微更智能的查询,其中包含您需要进行汇总的帐户名称.这样,当您只在页面上显示3-10个用户的信息时,就不会将大量数据集返回到您的网站.我不得不考虑更多关于如何优雅地做到这一点,但我建议远离“IN”语句,因为这将调用表的线性搜索.

总结

以上是内存溢出为你收集整理的sql – 存储/计算用户分数的最佳方法是什么?全部内容,希望文章能够帮你解决sql – 存储/计算用户分数的最佳方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存