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

Identifying base record - entity history in database

我想知道哪种解决方案更适合我的情况。

我有一项资产table。我想要资产变化的历史。所以我在我的实体中添加了两个字段:StartDate 和 EndDate。在每次更新中,我都会修改记录的 EndDate,插入新记录并设置其 StartDate。但是我应该如何识别"base"记录:

  1. 一个 RevisionNo 字段,它将是一个带有 Id

    的主键
    +---------------+----+
    |     Asset     |    |
    +---------------+----+
    | Id            | PK |
    | RevisionNo    | PK |
    | ...Details... |    |
    | StartDate     |    |
    | EndDate       |    |
    +---------------+----+
    
  2. 一个BaseRecordId字段,在base record中为null。

    +---------------+----+
    |     Asset     |    |
    +---------------+----+
    | Id            | PK |
    | ...Details... |    |
    | StartDate     |    |
    | EndDate       |    |
    | BaseRecordId  | FK |
    +---------------+----+
    

当我经常/很少 select 资产历史记录时,哪种方法更好。

此致, 康拉德

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