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

前端之家收集整理的这篇文章主要介绍了sql – 多个触发器与单个触发器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
场景:

每次在表格中插入/更新/删除数据时,最多需要执行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不应通过触发器和业务逻辑强制执行,不属于数据库.

猜你在找的MsSQL相关文章