识别基本记录 - 数据库中的实体历史
Identifying base record - entity history in database
我想知道哪种解决方案更适合我的情况。
我有一项资产table。我想要资产变化的历史。所以我在我的实体中添加了两个字段:StartDate 和 EndDate。在每次更新中,我都会修改记录的 EndDate,插入新记录并设置其 StartDate。但是我应该如何识别"base"记录:
一个 RevisionNo 字段,它将是一个带有 Id
的主键
+---------------+----+
| Asset | |
+---------------+----+
| Id | PK |
| RevisionNo | PK |
| ...Details... | |
| StartDate | |
| EndDate | |
+---------------+----+
一个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 是很自然的。
我想知道哪种解决方案更适合我的情况。
我有一项资产table。我想要资产变化的历史。所以我在我的实体中添加了两个字段:StartDate 和 EndDate。在每次更新中,我都会修改记录的 EndDate,插入新记录并设置其 StartDate。但是我应该如何识别"base"记录:
一个 RevisionNo 字段,它将是一个带有 Id
的主键+---------------+----+ | Asset | | +---------------+----+ | Id | PK | | RevisionNo | PK | | ...Details... | | | StartDate | | | EndDate | | +---------------+----+
一个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 是很自然的。