我的整个数据库偶尔会有错误的条目,但我不想直接更改数据,而是希望能够保留修改的更改.
这些变化很少发生.
理想情况是这样的: –
(original table fields) | revision_version | origin | user | timestamp
所以说我有一个名为posts的表,其中包含以下模式: –
title | description | timestamp | author
这样就会创建一个名为posts_revisions的附加表: –
title | description | timestamp | author | revision_version | origin | user | timestamp
>起源是变革的源头,无论是机器人,用户生成的还是你有什么.
您可以想象这是对现有数据库的一个相当大的更改,我目前关注的是检查每个查询的_revisions表的性能.对于这种事情,这是最好的做法吗?
解决方法:
对于这种类型的问题,我保留了当前表和历史表.
历史记录表具有以下附加列:
> HistoryID
> EffectiveDate
> EndDate
> VersionNumber
> CreatedBy
> CreatedAt
有效日期和结束日期是值有效的时间跨度.每当记录发生变化时,版本就会增加. id,CreatedAt和CreatedBy是我几乎放入数据库中每个表的列.
通常,我会将历史记录表与夜间作业保持同步,比较表格然后使用MERGE组合数据.另一种方法是将所有更改包装在存储过程中,并在那里更新两个表.另一种方法是使用触发器来检测何时发生更改.但是,我回避触发器,更喜欢前两种选择.
我必须承认磁盘空间不是这些表的重要考虑因素.因此,存储数据两次没有问题,一次在历史记录中的结果中一次.仅在历史表中存储历史记录只是一个小调整,当前记录在“当前”表中.
这种方法的一个缺点是改变基表的结构.如果要添加列,则需要将其添加到历史表和基表中.