php - SQL触发器和技术债务

标签 php mysql sql

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

对我来说,这听起来像是使用解决方法并产生技术债务。我错了吗?

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

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

尽我最大努力提供不是实际的,但接近实际的数据库模式 事件:ID、积分值、描述 用户事件:用户 ID、事件 ID、完成状态 GIVEN-POINTS:USERID, POINTS_GIVEN, DESC (给出了每个时间点,因此它更像是日志而不是更新点)

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

最佳答案

只要业务规则相当简单,触发器就是完成您想要做的事情的完全有效的方法。

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

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

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

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

关于php - SQL触发器和技术债务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618954/

相关文章:

php - Codeigniter 2.2 - 使用左连接和多个 where 子句更新 Active Record

php - 如何使用 PHP 中的 Authorize.net 以编程方式退款?

php - 包含带有 ID 的 div 两次,可能吗?

mysql - 如何在不删除换行符的情况下在 Sweave 中使用 SQL 查询格式化 R 源代码?

sql - 使用连接插入缺失的行

c# - 无法使用 Dapper.NET 将文件流插入 SQL 文件表

sql - 获取包含字母过滤的单词列表

javascript - 使用 JavaScript 实时更新网页元素时出错

javascript - 单击文件下载后,成功后使用 AJAX 重定向到另一个页面

mysql - 在 CentOS7 上使用 Debian 基础运行 MySQL docker 镜像