Database design 如何在我的网站上设计奖励系统

Database design 如何在我的网站上设计奖励系统,database-design,badge,reward-system,Database Design,Badge,Reward System,我想尝试和设计一个新的网站,我正在建设奖励制度。例如(仅用于说明目的): 堆栈溢出是另一个例子 我的问题是,您可以轻松地将每个徽章的描述和名称存储在数据库表中 **tbl_Badges** ID | Badge Name | canHaveMultiple | hasProgress | progressScale ---------------------------------------------------------------------------- 1

我想尝试和设计一个新的网站,我正在建设奖励制度。例如(仅用于说明目的):

堆栈溢出是另一个例子

我的问题是,您可以轻松地将每个徽章的描述和名称存储在数据库表中

**tbl_Badges**
ID  |  Badge Name  |  canHaveMultiple   |  hasProgress  |  progressScale
----------------------------------------------------------------------------
1     Copy Editor     Yes                    No                null
2     The Mob         Yes                    No                null
3     Jquery          No                     Yes               100
然后将用户与这些徽章关联:

**tbl_UsersBadges**
ID  |  Badge ID  | User ID
---------------------------
1      1            5
2      1            5
3      2            5
4      2            12
(也许还有另一个可以通过刻度徽章等存储用户进度的工具)

但困难在于如何编程授予这些徽章的触发器

像这样的系统是在网站上用硬编码触发器构建的吗?由于这些徽章的广泛性和灵活性,这是我能想到的唯一方法。但是,如果触发器硬编码为徽章ID,则在更改任何内容时都必须非常小心


这就是这样一个系统的工作原理吗?这与我所学到的背道而驰。还是我处理问题的方法有误?

首先,你需要确保你有一个清晰的“奖励”用户行为列表。然后,您必须创建一些代码,当其中一个操作发生时,这些代码将被触发。有多种方法可以查看解决方案:

  • 在数据库中保存可能导致奖励的每个操作。然后,数据库中的实际触发器将根据这些操作属性授予徽章,或者crontab作业可能会完成这项工作。好处是,如果您更改奖励系统的计算,您可以重播用户操作以获得新的奖励
  • 编写一些在调用任何其他方法之前自动调用的中心方法。根据该动作,您可以授予奖励,然后重定向到实际方法
  • 如您所述,使用硬编码操作,但这很繁琐且容易出错
    我只需要从软件中抛出事件,并从后端助手(将添加徽章、计划通知等)捕获它们,即使是异步的。您可以使用消息传递系统(AMQP或类似系统)从后端帮助程序处理这些事件