要系统化记录对哪些表所做的更改的方法,最有效的方法是什么?例如,我的数据库模式中大约有10-12个表,其中一个表通过连接大约7-8个表来显示记录。如何同步不同用户在同一记录或不同记录上所做的更改。
方法A:通过行激活器/去激活器标志。在更新记录时设置停用标志,这将停用该行,并在激活器标志打开的情况下插入新记录。
方法B:为每个表维护一个单独的数据库历史表,该表将存储数据wrt到时间戳。
假设:记录将频繁更新。期望的记录总数不应超过1000行。
您可能想要提出其他方法吗?
发布于 2012-01-25 07:54:42
我认为答案在于这样一个问题:“您需要查看特定记录的历史记录的频率是多少?原因是什么?
如果您偶尔需要这样做,以研究谁做了什么,以及何时或为了审计腐败,可以使用审计表方法,该方法通过每次数据更改时的触发器填充。或者使用变更跟踪,如果它对你有效的话(坦率地说,我们发现它不够好,不适合审计)。例如,还可以成功地使用更改跟踪来查看自上次数据导入以来记录是否已更改。请注意,更改跟踪数据不是永久性的,除非您以物理方式将其复制到另一个表中。
如果您需要频繁地显示整个历史记录,则将其全部保存在一个表中,并使用一个通过触发器维护的活动标志。创建一个视图,该视图仅包含活动记录,供开发人员在只想查看最新数据时使用。如果您正在对以前未存储历史的现有数据库执行此操作,则重命名该表,并将视图命名为与原表相同的表,这样就不会发生任何中断。
如果我需要用于报告的历史数据,而不是应用程序的其余部分,我还会考虑使用单独的历史表。举个例子,因为我们需要知道销售代表正在交谈的目标在联系发生时是否真的是高价值目标,因为这个计算是如何衡量销售代表绩效的一部分。显然,我们需要历史记录,但实际上每个月只需要一次。因此,每天降低性能以保持在同一个表中可能不是最好的解决方案。这可能有助于将耗时的报告从日常工作中分离出来,并且通常有助于提高性能。
发布于 2012-01-25 07:46:25
更改跟踪:http://msdn.microsoft.com/en-us/library/cc305322.aspx
或
变更数据捕获:http://msdn.microsoft.com/en-us/library/cc645937.aspx
https://stackoverflow.com/questions/8995932
复制相似问题