我一直在浏览这个网站寻找答案,但我仍然有点不确定如何在其数据库结构和实现中规划一个类似的系统。
在 PHP 和 MySQL 中,很明显会立即获得一些成就(当采取专门的操作时,在 SO 情况下:填写所有个人资料字段),尽管我知道 SO 会在一定时间后更新并分配徽章.拥有如此多的用户和徽章不会造成性能问题(就规模而言:用户和徽章的数量都很高)。
所以我假设的数据库结构很简单:
Badges | Badges_User | User
----------------------------------------------
bd_id | bd_id | user_id
bd_name | user_id | etc
bd_desc | assigned(bool) |
| assigned_at |
但正如一些人所说,最好采用增量样式方法,这样拥有 1,000,000 个论坛帖子的用户就不会减慢任何功能。
然后它会是另一个徽章表,可以是增量的,还是只是上面 badges_user 表中的“进度”字段?
感谢阅读,请关注所需系统的可扩展性(例如数千名用户和 20 到 40 个徽章)。
编辑:为了消除我指定的一些混淆,我将_at 作为日期/时间,授予徽章的标准最好放在为每个徽章准备好的查询/函数中,不是吗? (更好的灵 active )
最佳答案
我认为您建议的结构(根据评论没有“分配”字段)可以工作,添加一个附加表,例如“Submissions_User”,其中包含对 user_id 的引用和一个用于计数的递增字段提交。那么你所需要的只是一个“事件监听器”,根据 this post我想你已经准备好了。
编辑:对于成就徽章,在每次提交时运行事件监听器(当然仅适用于提交的用户),并当场授予任何相关徽章。对于基于时间的徽章,我每晚都会运行 CRON 作业。循环浏览完整的用户列表一次,并根据需要奖励徽章。
关于php - 成就/徽章系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744747/