php - 有什么想法可以改进我的徽章系统吗?

标签 php database-design doctrine-orm badge

我正在做一个徽章系统,到目前为止,我有这个想法:

创建一个 UserMeta 表来存储将在条件中使用的数据。

UserMeta
===========================
user_id | posted_comment_count | flagged_comment_count | reputation | etc.

我想知道这是否是个好主意,好像我需要添加一些元作为标准,我需要添加一列,所以我想在 json 中使用序列化对象,或者例如。

另一个名为 Badge 的表:

badge_id | badge_name | badge_criteria

其中 badge criteria 是 json 或任何其他序列化格式,它存储如下对象:

{
  'posted_comment_count': '>= 20',
  'flagged_comment_count': '=10',
}

还有另一个将用户与徽章相关联的表(一个简单的关联表)

我正在使用 Doctrine2,我想使用 Event 来更新 UserMeta。

有什么反馈、建议吗?

最佳答案

我的游戏化数据库非常简单。我有一个“货币”表,它有一个字段,一个名称。我有一个“UserCurrency”表,其中包含用户的 ID、他们赚取的货币的 ID 以及他们赚取的整数。当然,我有一个用户表。

就是这样。

我使用 Django,所以其中一些可能没有意义,但基本上我有一个事件监听器来监听数据库中的事件。当用户执行导致命中数据库的任何操作时,事件监听器将遍历一系列函数,每个函数都包含一个简单的目标语言标准,用于决定何时授予徽章。如果用户达到该标准,则授予徽章。 (“货币”可能是“帖子数”或“回复数”,甚至是“戳数”。不要将其误认为是货币值(value);它只是任何 是你要追踪的。

这是一种非常简单且完全可扩展的记账机制,用于记录分数,而不会因您正在跟踪的特定事物的详细信息而扰乱您的数据库架构。它完全独立于任何其他用户跟踪详细信息,例如个人资料。如果你想添加一种新货币,你要跟踪和关联并为其授予徽章的新事物,你将其名称添加到货币表中,一组如何授予它的规则,一组阈值规则用户会收到一些确认,然后由您决定如何向用户展示该确认以及奖励的后果是什么。

此外,规则可以相互关联。 Stack Overflow 在这方面做得非常(非常!)好。例如,当您访问该站点时,触发的规则甚至不计算货币,而是计算“爱好者”徽章的访问天数。每次您获得声誉时,如果您的分数超过 200,代码只会将货币计数器“传奇”更新为 1,当该货币达到 150 时,另一个触发器会奖励您的“传奇”徽章,依此类推。解耦和独立性是游戏化设计的有力工具。

关于php - 有什么想法可以改进我的徽章系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802779/

相关文章:

symfony - 在实体表单字段中创建查询

php - Doctrine2 多对一关联不会使用 JOIN 查询

php - 限制 Ajax 鼠标悬停

php - 避免硬编码嵌套 foreach 循环

php - 如何制作包含引号等字符的 Web 服务器 URL?

database - 使数据库中的 DateTime 字段自动生成?

mysql - 如何构造 mysql 表以避免多余的行

每次刷新页面时,PHP Mysql 新行插入到数据库表中

sql - 串行类型的外键 - 确保始终手动填充

mysql - Symfony - 过滤连接导致查询不返回任何内容