加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 多个触发器与单个触发器

发布时间:2020-12-12 06:36:24 所属栏目:MsSql教程 来源:网络整理
导读:场景: 每次在表格中插入/更新/删除数据时,最多需要执行3项操作: 数据需要记录到单独的表中 必须对隐式相关数据强制执行参照完整性(我指的是应该与外键关系链接的数据,但不是:例如.更新Table1.Name时也应将Table2.Name更新为相同的值) 需要执行任意业务逻辑
场景:

每次在表格中插入/更新/删除数据时,最多需要执行3项操作:

>数据需要记录到单独的表中
>必须对隐式相关数据强制执行参照完整性(我指的是应该与外键关系链接的数据,但不是:例如.更新Table1.Name时也应将Table2.Name更新为相同的值)
>需要执行任意业务逻辑

不得更改数据库的体系结构和模式,并且必须使用触发器来完成要求.

哪个选项更好?:

>每个操作(插入/更新/删除)的单个触发器,用于处理多个问题(日志,强制隐式参照完整性,并执行任意业务逻辑).此触发器可以命名为D_TableName(“D”表示删除).
>每个操作的多个触发器被关注隔离.他们可以命名为:

> D_TableName_Logging – 用于记录删除内容的日志
> D_TableName_RI
> D_TableName_BL

我更喜欢选项2,因为单个代码单元只有一个问题.我不是DBA,对SQL Server足够了解让我变得危险.

是否有任何令人信服的理由来处理单个触发器中的所有问题?

解决方法

哇,你处于一个没有赢的局面.谁曾要求通过触发器完成所有这些工作应该被拍摄然后被解雇.通过触发器执行RI?

您说过,不得更改数据库的体系结构和架构.但是,通过创建触发器,您至少可以更改数据库的模式,并且可以认为是架构.

我可能会使用选项#1并创建额外的存储过程和UDF来处理日志记录,BL和RI,以便代码不会在各个触发器中重复(触发器将调用这些存储过程和/或UDF).我真的不喜欢用你在方案2中提出的方式来命名触发器.

顺便说一下,请告诉你组织的某个人,这是疯了. RI不应通过触发器和业务逻辑强制执行,不属于数据库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读