我们不能省略数据库触发器吗?

时间:2013-06-16 19:03:25

标签: sql-server oracle architecture database-trigger

正如维基百科所说

  

数据库触发器通常用于:

     
      
  • 审核更改(例如,保留所涉及的用户和角色的日志   变化)
  •   
  • 增强更改(例如,确保对记录的每次更改   时间戳由服务器的时钟标记)
  •   
  • 执行业务规则(例如   要求每张发票至少有一个项目)等。
  •   

参考:database triggers - wikipedia

但我们可以使用通用编程语言(特别是使用OOP)轻松地在业务层内完成这些工作。那么现代软件架构中数据库触发器的必要性是什么?为什么我们真的需要它们?

3 个答案:

答案 0 :(得分:3)

如果所有数据仅由您的应用程序更改,则可能有效。但是我经常看到其他一些案例:

  1. 还有其他应用程序(如批量作业进行导入等)不使用业务层

  2. 您无法轻松使用纯SQL脚本作为修补程序的方法

  3. 除此之外,在某些情况下,您甚至可以组合两个世界:在数据库中定义触发器,并使用Java来实现它。 PostgreSql示例支持用Java编写的触发器。对于Oracle,您可以从PL / SQL触发器调用Java方法。您可以在MS SQL Server中定义基于CLR的触发器。

    这种方式不是每个程序员都需要学习PL / SQL,数据库强制执行数据完整性

答案 1 :(得分:2)

考虑一下性能。如果这是从应用程序完成的,那么很可能会有很多额外的sql * net往返,从而减慢了应用程序的速度。在数据库中定义这些操作后,确保始终强制执行这些操作,而不仅仅是在使用应用程序访问数据时。

当数据库处于控制之下时,您将在中央位置(数据库)上定义规则,而不是在应用程序的许多位置定义规则。

答案 2 :(得分:2)

是的,您可以完全省略数据库触发器。

但是,如果您不能保证只能从应用程序层访问您的数据库(这是不可能的),那么您需要它们。是的,您可以在应用程序层中执行所有数据库逻辑,但如果您在更新时有一个需要 X的表,那么唯一的方法就是触发器。如果不这样做,那么在应用程序之外直接访问数据库的人将破坏您的应用程序。

你无能为力。如果您需要触发器,请使用一个。不要假设您的数据库的所有连接都将通过您的应用程序...