多历史的表结构

时间:2010-01-05 11:14:58

标签: sql-server data-structures

我想创建表来保持对修正案的修改。对象的历史。 因为我已经创建了两列主键(标识和更新日期)

我还有3个日期列来维护历史记录和实际对象历史记录的状态列。 Status,StatusFrom,Statusto,UpdateDate& NextUpdateDate

UpdateDate& NextUpdateDate用于维护修正案。

有没有更好的方法来保持Record&的实际历史记录?修改记录的历史记录?

1 个答案:

答案 0 :(得分:1)

您正在创建所谓的“审核表”。有很多方法可以做到这一点;其中几个是:

  1. 创建一个表,其中包含您对源表感兴趣的所有列的相应键字段和之前/之后的字段,以及时间戳,以便您知道更改的时间。

    < / LI>
  2. 创建一个包含相应键字段,修改时间戳,字段名称以及列之前/之后的表。

  3. 方法(1)的问题是你在审计表中最终得到 lot 字段 - 对于源表中的每个字段基本上都是两个。此外,如果源表上只有一个或两个字段发生更改,则审计表上的大多数字段将为NULL,这可能会浪费空间(具体取决于您的数据库)。当你返回处理审计表时,它还需要很多专用代码来确定哪个字段发生了变化。

    方法(2)的问题是,您最终会在表中为源表上更改的每个字段创建一个单独的行,这会导致审计中的 lot 行表(每个字段改为一行)。因为每次字段更改都会导致将新行写入审计表,所以在多行中也会有相同的键值,这些键可能会占用一堆空间。

    无论审计表的结构如何,通常都会使用触发器来维护它们。

    我希望这会有所帮助。