单个触发器插入/更新/删除或多个触发器更好吗?

时间:2012-03-09 18:38:01

标签: sql-server database oracle triggers sybase-ase

我要求将插入/更新/删除操作从一个表镜像到另一个表。 例如,必须将tableA上的insert复制到tableB中,更新到tableA中应用的tableA,并将tableA中的delete应用于tableB。 它就是这么简单,除了tableB有一个额外的列用于常量值,因此需要非常简单的触发器。

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

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

这只是一个偏好问题,有3个触发器而不是1个,或者这两个解决方案都有实际好处吗?

2 个答案:

答案 0 :(得分:3)

假设您实际上需要一个触发器并且表B不能简单地定义为表A顶部的视图,或者表B不能仅使用引用A中的行以及常量的外键来定义, A无法重新定义以添加附加列(可能具有常量的默认值),一个触发器至少允许您将所有相关逻辑保留在一个位置,而不是在执行类似添加操作时需要更新多个位置A的新专栏。但我会非常警惕任何涉及两个不同表格的架构,这两个表格在两者中都反映了基本相同的数据。这违反了规范化,它增加了系统的I / O工作量,并使整个系统更加复杂。

答案 1 :(得分:2)

在尝试确定表A上的操作时,除了触发器执行本身的效率损失之外,分离触发器没有效率。

IE 3单独的触发器可以不使用验证逻辑来​​确定表A上刚刚发生的事情,因为触发器本身可以在一个气泡中表现,因为它知道它正在触发,这是由于单一动作。

虽然是3合1触发器,但您必须检查虚拟删除和插入表的状态,并在每次触发时派生操作。

如果你不担心导致“行动”的(通常很小的)性能影响,或者甚至不需要在表B中知道刚刚在Aable A上发生的“行动”......那么我认为1完全没问题。