2010-11-27 232 views
1

我目前正在开发一个小应用程序,用户通过完成任务累积积分。我想提供一些关于设计我的数据库表的最佳方法的建议。在某些方面,系统类似于SO,用户完成任务(在你的答案问题上),然后他们的观点平衡被更新。在数据库中存储用户积分系统的最佳方式

我目前有一个用户表,存储通常的用户信息,但不知道如何把它转发。

我最好有一个积分表(用户有很多积分),然后添加user_id和点数量;那么当查询用户点数时,用给定的user_id拉出所有点数并求和它们?

有没有更有效的方法来做到这一点?

感谢,

杰克

回答

1

加分表格是一个公平的方法,因为它允许跟踪获得积分的原因。根据用户数量,点数交易和使用的服务器数量,我会考虑持有一些常用的总量:最常见的是用户总点数。

要在点表中插入新点记录,您可以使用一个存储过程,该存储过程不仅将点记录在点表中,还会增加每个用户的点聚合。此聚合可以保存在用户表中的单独列中(如Oded所建议的)。

随着您的设计的进步,可能会出现可用于预先计算的新的有用聚合。

但要保持简单:只有在绝对必要时才使用这些聚合,例如计算用户的总点数需要很长时间。对于一个小型系统来说,这实际上不应该成为一个动态计算这些总数的问题。

1

如果points没有没有用户任何意义,并且与它一比一的关系,我会直接把田野上user表。

但是,如果你是记录不同类型的每个用户的点,我会创造一个points_type查找和points表键合到userpoints_type IDS。

+0

感谢您的答复 - 我打算使用添加一个新的条目,每次用户在积分表中获得积分时。因此,这将是一对多的关系。我认为将这两种方法组合在一起存储在users表中可能是明智的。 – Jack 2010-11-27 17:13:10

3

如果您只关注点总数,则按照Oded的建议,只需将该字段直接包含在User表中即可。但是,如果您需要知道如何获得这些积分,也许您可​​以拥有一张积分交易表。该交易表然后可以具有到User表的user_id字段和各种字段的外键,例如Action,Points,Date

上午我最好能有一分表(用户 有许多点)

用户为什么会拥有多少分?如在与各种类别相关的点?正如Oded也提到的那样,这归结于这些观点的含义以及你想知道的关于他们的信息(也就是与获得它们或对他们产生影响的用户有关,即投票答案会减少发布用户的积分)。