php – 何时使用存储过程和触发器与应用层

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 何时使用存储过程和触发器与应用层脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个两难的境地,我希望你能有一些专家意见.

我有一个名为CArds的表,其中包含列statUS.如果记录的状态从“下载”变为“发布”,我必须将记录引用插入另一个名为CARD_ASSIGNMENTS的表中.此外,记录需要多次添加到CARD_ASSIGNMENTS中,因为SCANNERS中有活动记录.

换句话说,如果有两个主动扫描仪,我将在CARD_ASSIGNMENTS中得到两条记录,如下所示:

ID   CARD_ID   SCANNER_ID   STATUS_ID
1    1         1            4
2    1         2            4

我的困境是我不太确定执行上述操作的最有效方法是什么.我考虑过以下选项:

>从PHP – 执行一次UPDATE查询,然后执行INSERT查询.
>创建一个存储过程,它将负责更新CARDS记录并将记录添加到CARD_ASSIGNMENTS中.然后,只需从PHP调用该存储过程.
>为CARDS表创建一个ON UPDATE触发器,它将处理INSERTS到CARD_ASSIGNMENTS表中.

PS.我的数据库简化版本可在MySQL Fiddle上获得

谢谢,
凯特

@R_404_1964@@H_304_26@
有趣的问题.

我将为您提供有关如何解决问题的线索.

所以,你必须首先定义三件事:

>预期的功能
>功能的访问策略
>技升级政策

在这里,我将详细介绍这些要点.

所以,第一点是你必须定义你的功能.通过这样做,您将能够判断添加是否总是意味着,在您的信息系统的所有可能的范例(对不起迂腐的词,我找不到更合适的一个)中,这张卡必须存在于根据您提供的规格,其他表格.此1-1功能链接必须为TRUE或FALSE.这非常重要.
换句话说,如果至少有一种可能性,有一天你不想将该记录复制到另一个表中,则意味着触发器是错误解决方案,或者至少应该考虑采用紧急模式(对于例如,一个变量内部允许它在某些条件下不被执行)安装.

然后是关于访问策略的第二点.您必须知道允许的访问系统是通过使用您的应用程序层还是可以开发自己的(SAAS样式)来实现的.如果是这样,你的PHP层将是无用的,并且存储过程是一个很好的选择,因为每个技术和业务层都将通过它是或是.

最后要知道的是,有一天你是否可能要升级你的PHP层.在大多数情况下,答案是肯定的.如果是这样,您可能必须修改包含您正在讨论的sql逻辑的部分.然后,将所有内容都存储到存储过程中并将其硬编码存储到PHP中肯定会节省您的时间,并提高稳定性.

左脑右脑,我将告诉你我个人的意见.我真的很喜欢使用存储过程但不使用任何触发器.如果环境允许,我会寻找一个底层批处理,调用一组已定义的存储过程,将活动集中在在线范围之外.

优点如下:

>由于减少了操作次数,因此无法或更少地中断在线工作流程的风险
>不同的计划来分配数据库负载
>更安全的策略,因为执行存储过程只需要一个授权,而使用与PHP相同的sql则需要插入/更新授权
>更好的日志记录质量:每个作业可以有一个日志
>更好的紧急响应:当一个工作失败时(如果经过深思熟虑)你可以重新启动它,就是这样.

很长的帖子,但这很有趣,我真的想分享这些想法.

干杯!

脚本宝典总结

以上是脚本宝典为你收集整理的php – 何时使用存储过程和触发器与应用层全部内容,希望文章能够帮你解决php – 何时使用存储过程和触发器与应用层所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。