历史表的优点、缺点和问题 - 使用触发器、sproc 或在应用程序级别

History tables pros, cons and gotchas - using triggers, sproc or at application level(历史表的优点、缺点和问题 - 使用触发器、sproc 或在应用程序级别)
本文介绍了历史表的优点、缺点和问题 - 使用触发器、sproc 或在应用程序级别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在考虑在我的数据库中为我的一些表创建历史表的想法.基本上,我有主表和该表的副本,其中包含修改日期和操作列,用于存储执行的操作,例如更新、删除和插入.

I am currently playing around with the idea of having history tables for some of my tables in my database. Basically I have the main table and a copy of that table with a modified date and an action column to store what action was preformed e.g., Update, Delete and Insert.

到目前为止,我可以想到三个不同的地方可以进行历史表工作.

So far I can think of three different places that you can do the history table work.

  • 在主表上触发更新、插入和删除.(数据库)
  • 存储过程.(数据库)
  • 应用层.(申请)

我的主要问题是;在每一层中进行工作的优缺点是什么?

My main question is; what are the pros, cons and gotchas of doing the work in each of these layers?

我能想到的使用触发器方式的一个优点是,无论在数据库之上实施什么,都始终保持完整性.

One advantage I can think of by using the triggers way is that integrity is always maintained no matter what is implemented on top of the database.

推荐答案

我会这样说:

  • 存储过程:如果您直接修改表,它们将被绕过.数据库的安全性可以控制这一点
  • 申请:同样的交易.另外如果你有多个应用程序,可能是不同的语言,则需要在每个堆栈中实现,这有点多余;和
  • 触发器:对应用程序透明,并将捕获所有更改.这是我的首选方法.
  • Stored procs: they're bypassed if you modify the table directly. Security on the database can control this
  • Application: same deal. Also if you have multiple applications, possibly in different languages, it needs to be implemented in each stack, which is somewhat redundant; and
  • Triggers: transparent to the application and will capture all changes. This is my preferred method.

这篇关于历史表的优点、缺点和问题 - 使用触发器、sproc 或在应用程序级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)