跟踪会员完成的挑战/目标的最佳方式?

时间:2010-08-02 12:07:58

标签: php mysql database-design coding-style

这是一个与应用程序无关的问题,但我希望得到一个更好的答案。

跟踪完成挑战或目标的用户的最佳设置是什么?与Stack Overflow类似,如果您达到某个目标,则会获得徽章。

目前,我是一个网站的开发者和附加的Facebook应用程序。我想知道跟踪已完成挑战的最佳方法。目前,我只用一行代码插入实际的控制器代码,这可能不是最好的方法。如下所示:

if ($upload_photo == true) {
    $challenge->perform(1);
}

如您所见,上面的内容基本上触发了对perform()类(Challenge类)的调用,该方法具有数据库查找功能,以查看是否已达到质询阈值如果没有,则插入一条记录,并向该成员提供与该挑战相关的点数。为此设置的数据库很简单,如下所示:

member_id INT
challenge_id INT

要获得成员执行特定挑战的次数,我只需运行COUNT (*) AS count FROM table_name WHERE member_id = ? AND challenge_id = ?查询。

但这是最好的设置吗?我想不是,并且对如何改进这种设置持开放态度。

如上所述,我还负责开发与此网站相关的Facebook应用程序。将有一个进度条,允许用户执行某些操作并获得奖励。例如,为应用程序添加书签;喜欢申请;并向他们的Facebook好友提出申请。

使用Facebook的PHP SDK我可以查询这些操作是否已完成。没问题。我的问题出现在离开应用程序的用户身上,然后在会话过期的时候返回。执行操作时,是否应将其作为记录存储在数据库表中,并在用户登录应用程序时查询数据库?或者我应该只对登录进行检查并将结果存储在会话中,在触发相关操作时覆盖相关会话密钥?

欢迎任何改进此设置的建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您是否正在寻找有关如何在数据库中存储目标的建议?如果是这样,那么久经考验的多对多关系听起来就适合您的情况。

包含用户的表,包含目标的表和包含用户已实现该目标的每个表的标识符的中间表。

我确信你知道,如果你想在会话中存储数据,那么当会话被破坏时,这些数据就会丢失。您是否关心这取决于您自己。如果它在数据库中,那么至少它可以无限期地使用。