sql-server - 插入/更新/删除使用单个触发器还是多个触发器更好?

标签 sql-server database oracle triggers sap-ase

我需要将插入/更新/删除操作从一个表镜像到另一个表。 例如,表 A 上的插入必须复制到表 B 中,对表 A 的更新应用于表 B,从表 A 中删除应用于表 B。 就这么简单,除了 tableB 有 1 个附加列用于常量值,因此需要非常简单的触发器。

我不确定是编写 3 个单独的触发器更好,还是用一个触发器执行所有操作更好。

这适用于 3 个数据库:Sybase ASE、MSSQL 和 Oracle,我希望保持类似的解决方案(因此 3 个数据库适用于所有数据库,或者 1 个数据库适用于所有数据库)。

使用 3 个触发器还是使用 1 个触发器这只是一个偏好问题,还是这两种解决方案都有实际好处?

最佳答案

假设您实际上需要一个触发器,并且表 B 不能简单地定义为表 A 之上的 View ,或者表 B 不能仅使用引用 A 中的行以及常量的外键来定义,则A 无法重新定义以添加附加列(可能具有常量的默认值),一个触发器至少可以让您将所有相关逻辑保留在一个位置,而不是在执行诸如 add 之类的操作时需要更新多个位置但我会对任何涉及两个不同表(反射(reflect)本质上相同的数据)的架构非常警惕。这违反了规范化,增加了系统的 I/O 工作负载,并使整个系统变得更加复杂。

关于sql-server - 插入/更新/删除使用单个触发器还是多个触发器更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9639254/

相关文章:

sql-server - SQL Server PATINDEX 有时会返回错误的已找到索引

sql-server - 是否有预览过程/函数定义的快捷方式

sql - 使用聚集索引更好还是使用包含列的非聚集索引更好?

c# - 如何禁用 EF 代码优先中链接表的级联删除?

oracle - Oracle 中两个事务可以同时修改同一行吗?

.net - 使用多个网络服务器在现有 .NET/SQL Server 堆栈上实现 Lucene

database - 在数据库中存储年份

sql-server - 锁定整个数据库?

javascript - 如何根据 Oracle Apex 中的选择列表选项显示/隐藏文本字段?

java - Hibernate 序列生成不适用于复合键的元素