【问题标题】:Database History数据库历史
【发布时间】:2012-01-24 23:39:31
【问题描述】:

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

方法 A:通过设置行激活器/停用器标志。在更新记录时设置 deactivator 标志,这将停用该行并插入一条启用了 activator 标志的新记录。

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

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

您可能还想提出其他方法吗?

【问题讨论】:

    标签: sql database sql-server-2008


    【解决方案1】:

    我认为答案在于“您需要多久查看一次特定记录的历史记录以及出于什么原因?

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

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

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

    【讨论】:

    • 感谢 HLGEM。我喜欢创建只有活动行和重命名概念的视图的方式。我可能会选择那个选项。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2021-09-19
    相关资源
    最近更新 更多