Dan*_*Dan 8 sql sql-server triggers sql-server-2008-r2
场景:
每次在表格中插入/更新/删除数据时,最多需要做3件事:
Table1.Name也应更新Table2.Name为相同值时)不得更改数据库的体系结构和模式,并且必须使用触发器来完成要求.
题
哪个选项更好?:
D_TableName("D"表示删除).每个操作的多个触发器被关注隔离.它们可以命名为:
D_TableName_Logging - 用于删除某些内容时的日志记录 D_TableName_RID_TableName_BL我更喜欢选项2,因为单个代码单元只有一个问题.我不是DBA,对SQL Server足够了解让我变得危险.
是否有任何令人信服的理由来处理单个触发器中的所有问题?
在一个触发器中完成这一切可能会更有效,因为您最终可能会减少对(未索引)inserted和deleted表的操作。
此外,当您有多个触发器时,可以设置触发的第一个和最后一个触发器,但任何其他触发器都会以任意顺序触发,因此如果您对特定操作有超过 3 个触发器,则无法确定地控制事件的顺序。
如果这些考虑因素都不适用,那么这只是一个偏好问题。
当然,不用说,使用触发器执行此操作的规范很糟糕。
哇,你处于一个双赢的境地。谁曾要求通过扳机来完成所有这些事情,应该被枪杀,然后被解雇。通过触发器强制执行 RI?
你说数据库的架构和模式一定不能改变。然而,通过创建触发器,您至少改变了数据库的模式,并且可能会改变体系结构。
我可能会使用选项 #1 并创建额外的存储过程和 UDF 来处理日志记录、BL 和 RI,以便代码不会在各个触发器之间重复(触发器将调用这些存储过程和/或 UDF)。我真的不喜欢按照您在选项 2 中建议的方式命名触发器。
顺便说一句,请告诉您组织中的某人,这太疯狂了。RI 不应通过触发器强制执行,并且业务逻辑不属于数据库。