我想知道在我的情况下哪一个会更好。
我有资产表。我希望有资产变化的历史。所以我在我的实体中添加了两个字段:StartDate和EndDate。在每次更新中,我都会修改记录的EndDate,插入新记录并设置其StartDate。但是我应该如何识别“基础”记录:
RevisionNo字段,它是Id
的PrimaryKey+---------------+----+
| Asset | |
+---------------+----+
| Id | PK |
| RevisionNo | PK |
| ...Details... | |
| StartDate | |
| EndDate | |
+---------------+----+
BaseRecordId字段,在基本记录中为空。
+---------------+----+
| Asset | |
+---------------+----+
| Id | PK |
| ...Details... | |
| StartDate | |
| EndDate | |
| BaseRecordId | FK |
+---------------+----+
当我经常/很少选择资产历史时,哪一种方法更好。
此致 康拉德
答案 0 :(得分:1)
我们这样做了:我们添加了3列PrevVersionID,NextVersionID,BaseVersionID。
我们有这样的要求,如果我看一下,我应该有能力看到上一版本和下一版本,也有基本版本。无论您多久阅读一次数据,这种方法肯定会是最快的,因为您拥有历史的关键。在您的第一个场景中,您将需要SELECT TOP 1 FROM ASSETS WHERE ID = @ID ORDER BY RevesionNo
之类的东西,这将会慢得多。对于我来说,在所有历史记录中都有BaseID是很自然的。