【问题标题】:Database trigger or a common method in code?数据库触发器还是代码中的常用方法?
【发布时间】:2010-08-18 10:47:08
【问题描述】:

我有一张表,我想在其中记录我的应用程序某些部分的活动。当在其他表中插入/更新记录时,将在该表中插入一条记录(将来可能会更新)。

例如

  • 如果在 Orders 表中插入记录 将在 Log 中插入一个条目 表。
  • 如果在 Booking 中插入记录 表中将插入一个条目 日志表。
  • 如果记录在客户中更新 表中将插入一个条目 日志表如果日志表没有 此客户的条目。

等等。

我应该在这些表上使用触发器以在 Log 表中添加记录,还是应该在我的代码中使用一个通用方法并在发生插入/更新活动时调用该方法?

我必须在我的应用程序的某些部分上执行此活动,因此我将在 20 多个表上添加触发器或从我将调用方法的几个不同位置。

我使用的是 SQL Server 2005 和 C#

什么更好,触发器还是A方法?

【问题讨论】:

  • 如果有人认为这个问题的标签更好,请编辑它。

标签: c# sql sql-server-2005 methods triggers


【解决方案1】:

方法是比触发器更好的选择。 触发器一般是 - 性能重 - 在代码中不太明显,即隐藏起来 - 更难调试和维护。 - 传递给日志表的值的限制

一种方法在优化代码、扩展逻辑和易于维护方面会给您带来很多优势

【讨论】:

  • +1:如果它是“常见的”,那么您有几种 OO 技术来处理这个问题。继承和委托是使其成为应用程序公共部分的重要方法。此外,在某些语言中,您可以使用“装饰器”等“面向方面的编程”技术,以使此通用功能易于应用于相关类。
【解决方案2】:

由于这似乎是一项重要的任务,我会在 RDBMS 中使用触发器来确保不仅您的应用程序会导致创建日志。

【讨论】:

  • 这在现在可能看起来并不重要,但在未来可能会变得更加重要。防止客户直接篡改数据库,也防止您在部分代码中忘记它。
【解决方案3】:

如果有人能够通过使用 TOAD、SSMS、Query Ananlyzer 等技术在没有您的应用的情况下更新数据库,那么触发器会更好

【讨论】:

    【解决方案4】:

    这样的问题永远不会太迟,
    一般来说,触发器会减少您的数据库和代码的往返行程,
    在您的情况下,要在 C# 中执行此操作,您需要为每个操作执行 2 次行程,一次用于操作(插入),一次用于日志操作,当然您需要对代码中的异常进行大量处理,所以如果记录没有插入你处理这个并且你记录不同的失败动作
    作为触发器,您将数据发送一次到服务器,所有操作和处理都在那里完成,没有额外的连接
    现在这特别有用,因为所有东西都是共享的并且连接轮询是有限的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多