0

我的老板要求我通过在我们的 mysql 数据库中与用户表关联的点来创建一个更简单的系统来查找点。旧系统只有事件,有点值,然后是另一个表,其中包含为用户完成的事件,然后是另一个表,仅用于管理员给定的点。所以我的工作是将这些全部加在一起并放在一个列中。现在他说问题是仍然存在围绕添加点运行的所有查询,但不是将它们更改为在任务完成时简单地将点添加到用户列,他们建议我使用触发器来简单地将点添加到用户列,当其他列之一添加了点时。

对我来说,这听起来像是使用变通方法并制造技术债务。我错了吗?

我是系统新手,我不知道所有查询在 php 页面中的确切位置,但如果这会造成技术债务,那么解决此问题的适当方法是什么。

我是新手,可能会只使用 sql 触发器,以免违背我老板的建议,我想至少知道做事的聪明/最佳方式。

尽我所能提供不是实际的,但接近实际的数据库模式事件:ID,点值,Desc 用户事件:USERID,EVENTID,COM​​PLETION-STATUS GIVEN-POINTS:USERID,POINTS_GIVEN,DESC(每个时间点都给出,所以它比更新点更多的日志)

我在基本 USER TABLE 中添加了一个 Points 列,当用户事件完成状态 = 完成时,触发器将是,查找点值,添加到用户中的点,而不是更改查询来执行此操作。

4

1 回答 1

2

只要业务规则相当简单,触发器就是完成您正在尝试做的事情的一种完全有效的方式。

有很多方法可以完成将数据从一个表移动到另一个表。您可以使用触发器、某种同步 PHP 进程或使用某种消息队列的异步进程。

触发器的优点是编码、维护和运行简单快速。好处是您只需编写一次代码,这特别好,因为您不知道所有涉及这些表的查询在哪里。不利的一面是您可能会将业务逻辑放入数据库中,这可能是您开始陷入技术债务的地方。另一个缺点是您添加了另一个业务层,这对于下一个开发人员可能并不明显,因此他们可能会花费大量时间来试图弄清楚汇总表的更新方式和原因。在这种情况下,评论是一件好事。

同步 PHP 进程的优点在于代码执行的位置非常明显。另一个好处是您可以访问整个 PHP 应用程序上下文并且可以创建更复杂的业务规则。不利的一面是,您必须将函数或方法调用放入可能会触及表格的每个位置。

异步 PHP 进程与同步 PHP 进程具有相同的优点和缺点,另外还有一个好处是它们不会降低用户体验。它们的创建也有点复杂。您必须处理未收到消息或未按正确顺序收到消息的情况。

于 2013-09-04T16:28:01.380 回答