【问题标题】:what’s the best way to do this operation执行此操作的最佳方法是什么
【发布时间】:2010-01-26 15:54:56
【问题描述】:

我有一个关于执行此操作的最佳方法是什么的问题: 我有一个数据库,假设它有 4 个表(表的数量可能会更高),当我想对 table1 、 table2 和 table3 执行任何 CRUD(Insert,update,delete) 操作时,我必须做同样的事情对 table4 的操作,现在 table4 非常关键,所以我必须确保所有操作都是准确和快速的,最终这个表将用于获取系统报告,所以我需要它快速 现在以下两种方式哪个更好:

-第一种方法发生在数据库中,所以我创建了一个存储过程或触发器 并且当在任何表(table1,table2,table3)中执行任何操作时,这会激活在table4中执行相同操作的触发器

-第二种方法发生在程序代码(asp.net和c#)中,当对任何表(table1、table2、table3)执行任何操作时,我使用类或任何代码对table4执行相同的操作。

当我们选择任何一种方式时,我们需要牢记哪些事项,例如安全性、数据库大小、应用程序架构以及......

谢谢

【问题讨论】:

    标签: architecture


    【解决方案1】:

    如果您的意思是 table4 仅用于生成报告的只读,则它应该是视图而不是表。但是如果它应该是一个表,那么在数据库级别使用触发器是很好的。由于它更快、更安全,而且在未来,如果任何其他应用程序更新其他表,table4 中的数据会自动更新,无需重新实现应用程序逻辑。

    【讨论】:

      【解决方案2】:

      如果可行的话,我喜欢 Teja 的想法,即为 table4 使用视图(即,该表不包含任何不在 table1、table2 或 table3 中的数据)。

      在考虑使用存储过程时,请考虑如果任何表的架构发生任何变化会发生什么。如果您必须重新访问每个存储过程并对其进行更改怎么办?如果有很多,那可能需要付出很多努力,并引入制造错误的机会。

      触发器比存储过程更容易更改。但它们确实会带来性能成本。如果很多表的每次写入操作都有触发器,它们真的会减慢您的应用程序的速度。

      【讨论】:

      • 感谢大家的及时回复,,,我知道在某些时候使用触发器是一个不错的选择,但我在想,如果:我创建一个函数来(插入/更新/删除) tableC 和这个函数可以从任何可以(插入/更新/删除)tableA 和 tableB 的存储过程中调用。如果需要更改,这将允许我管理一个函数,而不是修改每个存储过程中的代码。另外,我可以在每个存储过程中使用一个事务来保持所有表中的数据一致。
      • 我真的很喜欢你的想法。它避免了使用触发器的开销,并保留了一段代码(在一个函数或由其他存储过程调用的存储过程中),因此易于维护。并测试。此外,如果需要,您可以包含触发器不可用的数据。对你有好处!
      猜你喜欢
      • 2012-10-02
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多