数据库历史

时间:2012-01-24 23:39:31

标签: sql database sql-server-2008

系统化记录对哪些表进行了哪些更改的方法的最有效方法是什么?例如,我的数据库模式中有大约10-12个表,一个表通过加入大约7-8个表来显示记录。如何同步各个用户在同一记录或不同记录上所做的更改。

方法A:通过具有行激活器/去激活器标志。更新记录时设置去激活器标志,这将取消激活该行并插入带有激活标志的新记录。

方法B:为将数据存储到时间戳的每个表维护一个单独的数据库历史表。

假设:记录会经常更新。预期记录总数不应超过1000行。

您可能想提出的任何其他方法?

2 个答案:

答案 0 :(得分:1)

我认为答案在于这样一个问题:“您需要多久查看一次特定记录的历史记录以及具体的记录?

如果您偶尔需要这样做来研究谁在审核时发生了什么或者在审核上做了什么,那么在每次数据更改时都会使用通过触发器填充的审计表方法。或者使用变更跟踪(如果它适合您)(坦率地说,我们认为它不足以进行审计)。还可以成功使用更改跟踪来查看自上次数据导入以来记录是否已更改。请注意,更改跟踪数据不是永久性的,除非您将其物理复制到另一个表。

如果您需要经常显示整个历史记录,请将其全部保存在一个表中,并使用通过触发器维护的活动标记。创建一个只有活动记录的视图,供开发人员在只想查看最新数据时使用。如果您正在对现有的数据库执行此操作,而该数据库通常不存储历史记录,则重命名该表并将该视图命名为相同的表,或者没有任何中断。

如果我需要报告的历史数据而不是应用程序的其余部分,我还会考虑使用单独的历史记录表。我们有这个原因,因为我们需要知道销售代表正在谈论的目标实际上是否是联系发生时的高价值目标,因为这种情况是销售代表业绩如何衡量的一部分。显然我们需要历史,但实际上每个月只需要一次。因此,每天降低性能以使其保持在同一个表中可能不是最佳解决方案。这可能有助于使报告耗时的东西远离日常工作,并且可能通常有助于提高性能。

答案 1 :(得分:0)