我有一些用户通过参加网站上的各种事件来赚取积分,然后用户可以将这些积分花在他们喜欢的任何事情上,我目前设置的方式是我有一张 table - tbl_users_achievements 和 tbl_users_purchased_items
我有这两个表来跟踪用户做了什么以及他们买了什么(显然!)
但是,我没有在我的用户表中有一列名为“user_points”的列,而是决定通过对所有成就进行 SELECT 并获取他们获得的积分总和来显示他们的积分,然后我在他们花费了多少积分。
我认为最好有一个列来存储他们的积分,当他们购买东西并赢得东西时,我会为该用户对该列进行更新,但这似乎是我必须管理的多个区域,我有为事务插入一个新行,然后更新他们的列,如果我使用查询来计算他们赢得的总花费,我只需要插入该行并且不进行更新。但问题是运行查询和进行计算的性能。
那么您会选择哪种解决方案?为什么?
- 有一列来存储他们的积分并进行更新
- 使用查询计算出他们可以花费且没有列的用户积分
最佳答案
您当前的模型在逻辑上是正确的 - RDBMS 规范化的一个关键方面是不重复任何信息,并保持明确的“此客户有 x 点”列重复数据。
这样做的好处是显而易见的 - 您需要编写的数据操作代码更少,并且不必担心插入事务但无法更新用户表时会发生什么。
缺点是每次显示客户资料时都会运行额外的查询;这可能会产生性能问题。对该性能问题的传统响应是反规范化,例如根据用户表保留计算出的总数。
只有在绝对有必要时才这样做。
关于mysql - 计算用户点 - 更新与选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152608/