|
1
14
当主表更改时存储更改的表称为审计表。您可以通过多种方式执行此操作:
还请记住,一个事务可以同时修改多个记录,因此您应该使用完整的已修改记录集,而不仅仅是最后一个记录(大多数人都很晚才意识到这一点)。 在触发器执行完成之前,控件不会返回到调用程序。所以你应该尽可能的轻和快地保存代码。
审计表的结构
您将拥有以下列:
表结构:
这个结构意味着您将为每个保存的数据表创建一个审计表。数据的保存和重建相当容易。我建议采用这种方法。
名称-值对:
这个结构允许您保存任何表,但是您必须为触发器中的每一列创建名称-值对。这是非常通用的,但是很贵。您还需要编写一些视图,通过取消数据透视来重新创建实际行。这会变得很乏味,而且通常不会采用这种方法。 |
|
|
2
5
微软在SQL Server 2008中引入了新的审计功能。这里有一篇文章描述了一些功能和设计目标,这些功能和设计目标可能对您选择的任何方法都有帮助。 |
|
|
3
5
你可以使用触发器。 这里是 one 例子。
|
|
|
4
2
保存序列化的数据最终总是会变得混乱,您应该远离它。最好的做法是创建一个与主表具有相同列的并行“版本”表。 例如,如果有一个名为“book”的表,列为“id”、“name”、“author”,则可以添加一个名为“book\u version”的表,列为“id”、“name”、“author”、“version\date”、“version\u user” 每次在“book”表中插入或更新记录时,应用程序也将插入“book\u version”。 根据您的数据库系统和您从应用程序访问数据库的方式,您可能能够完全自动化这一点(cfr条令中的可版本化插件) |
|
|
5
1
一种方法是使用一个本地支持这个的数据库,比如 HBase . 我通常不会建议“更改您的数据库服务器以获得这一功能”,但是由于您没有在问题中指定数据库服务器,我假定您的意思是这是开放式的,并且服务器中的本地支持是这一功能的最佳实现之一。 |
|
|
6
0
您使用的是什么数据库系统?如果您使用的是与ACID(原子性、一致性、隔离性、持久性)兼容的数据库,那么您就不能使用内置的回滚功能返回到以前的事务吗? |
|
|
7
0
我用NHibernate很好地解决了这个问题。 对于那些感兴趣的人,请阅读: http://nhforge.org/blogs/nhibernate/archive/2010/07/05/nhibernate-auditing-v3-poor-man-s-envers.aspx |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |