我的用户通过参与网站上的各种活动来获得积分,然后用户可以将这些积分用于他们喜欢的任何内容,我现在设置的方式是我有一张桌子 - tbl_users_achievements和tbl_users_purchased_items
我有这两个表来跟踪用户做了什么以及他们买了什么(显然!)
但是我没有在我的用户表中有一个名为'user_points'的列,我决定通过对所有成就执行SELECT并获得他们已经获得的点数的总和来显示他们的点,然后我做另一个选择他们花了多少分。
我认为最好有一个专栏来存储他们的积分,当他们购买东西并赢得东西时,我会对该用户的专栏进行更新,但这似乎是我必须管理的多个领域,我有为事务插入一个新行,然后更新他们的列,如果我使用一个查询来计算他们的总赢额 - 我只需要插入行并且不做更新。但问题是运行和使用查询进行计算的性能。
那么你会选择哪种解决方案?为什么?
答案 0 :(得分:0)
我自己,我会根据用户ID或其他任何内容将用户点放入一个单独的表格中,并将其存储在那里,并在达到成就或花费点数时进行更新或递减。
答案 1 :(得分:0)
您当前的模型在逻辑上是正确的 - RDBMS规范化的一个关键方面是不重复任何信息,并保持明确的“此客户有x点”列重复数据。
这样做的好处显而易见 - 您可以编写更少的数据操作代码,并且不必担心插入事务时会发生什么但无法更新users表。
缺点是每次显示客户资料时都会运行其他查询;这可能会造成性能问题。对该性能问题的传统响应是去标准化,例如通过将计算的总数保持在用户表上。
只有在绝对可行的情况下才这样做。