识别基本记录 - 数据库中的实体历史记录

时间:2015-01-15 10:38:04

标签: sql sql-server architecture

我想知道在我的情况下哪一个会更好。

我有资产表。我希望有资产变化的历史。所以我在我的实体中添加了两个字段:StartDate和EndDate。在每次更新中,我都会修改记录的EndDate,插入新记录并设置其StartDate。但是我应该如何识别“基础”记录:

  1. RevisionNo字段,它是Id

    的PrimaryKey
    +---------------+----+
    |     Asset     |    |
    +---------------+----+
    | Id            | PK |
    | RevisionNo    | PK |
    | ...Details... |    |
    | StartDate     |    |
    | EndDate       |    |
    +---------------+----+
    
  2. BaseRecordId字段,在基本记录中为空。

    +---------------+----+
    |     Asset     |    |
    +---------------+----+
    | Id            | PK |
    | ...Details... |    |
    | StartDate     |    |
    | EndDate       |    |
    | BaseRecordId  | FK |
    +---------------+----+
    
  3. 当我经常/很少选择资产历史时,哪一种方法更好。

    此致 康拉德

1 个答案:

答案 0 :(得分:1)

我们这样做了:我们添加了3列PrevVersionID,NextVersionID,BaseVersionID。 我们有这样的要求,如果我看一下,我应该有能力看到上一版本和下一版本,也有基本版本。无论您多久阅读一次数据,这种方法肯定会是最快的,因为您拥有历史的关键。在您的第一个场景中,您将需要SELECT TOP 1 FROM ASSETS WHERE ID = @ID ORDER BY RevesionNo之类的东西,这将会慢得多。对于我来说,在所有历史记录中都有BaseID是很自然的。