设想:
每次将数据插入/更新/删除到/从表中/从表中,最多需要发生 3 件事:
- 数据需要记录到单独的表中
- 必须对隐式相关数据强制执行引用完整性(我指的是应该与外键关系链接的数据,但不是:例如,当更新
Table1.Name
也应该更新Table2.Name
为相同的值时) - 任意业务逻辑需要执行
不得更改数据库的体系结构和模式,并且必须使用触发器来完成要求。
问题
哪个选项更好?:
- 每个操作(插入/更新/删除)的单个触发器处理多个关注点(日志、强制执行隐式引用完整性和执行任意业务逻辑)。此触发器可以命名
D_TableName
(“D”表示删除)。 每个操作的多个触发器按关注点隔离。他们可以被命名为:
D_TableName_Logging
- 用于在删除某些内容时进行记录D_TableName_RI
D_TableName_BL
我更喜欢选项 2,因为单个代码单元有一个问题。我不是 DBA,对 SQL Server 的了解足以让我变得危险。
是否有任何令人信服的理由可以在一个触发器中处理所有问题?