这是基于动作的用户调配系统的良好实现吗?

时间:2016-06-06 21:07:15

标签: php mysql optimization database-design

目前,系统应该有6个不同的用户级别。

每个级别都将在用户活动时获得,例如:

Level 1 - When user register
Level 2 - When user completes a mission
Level 3 - When user completes more than one mission
Level 4 - When user donate > $X amount of money
Level 5 - When user write more than 50 comments in blog
Level 6 - When user complete quiz 

现在......我想知道,实现这一目标的最佳数据库架构是什么?我应该跟踪与用户活动相关的所有操作,这就是为什么我关于xp_events表格......这样的事情:

id # primary key
event # type of event, e.g. 'register', 'complete_quiz', etc.
user_id # id of user
delta # number of "exp" which will be gained after specific action

并且......在users表格中,我会保留当前等级的记录,并且" exp"到目前为止每个用户都获得了

当用户进行任何活动时,我会调用一个触发器来检查用户是否已解锁新级别。

但是......我意识到从长远来看(例如,如果添加更多级别),这不是最佳解决方案。

期待任何建议。

1 个答案:

答案 0 :(得分:1)

我在这里看到两个明显的可能性。

一个是像你说的那样拥有一个事件表,包括用户ID,事件ID,金额(捐款),可能是日期/时间,也许是其他数据。如果您保留这些数据的唯一原因是确定每个用户的级别,这很简单有效。

如果您还为其他目的跟踪此数据,您可能希望将其分成多个表。在这种情况下,您可能需要为每个事件保留其他数据。就像捐赠一样,你需要美元金额,我认为这些金额不适用于评论和任务。对于评论,您可能需要评论的文本以及此评论所涉及的主题的一些指示或其主题是什么。对于一项任务 - 我不知道什么是一个任务"在这种情况下,你可能想要一些关于任务类型和它在哪里或者应该杀死什么的信息。大多数此类数据不适用于不同类型的事件。评论可能没有美元金额,任务没有线程等等。因此,您最终会得到大量无关数据和一串空字段。