mysql – SQL数据库中数据修订控制的最佳实践

我的整个数据库偶尔会有错误的条目,但我不想直接更改数据,而是希望能够保留修改的更改.

这些变化很少发生.

理想情况是这样的: –

 (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组合数据.另一种方法是将所有更改包装在存储过程中,并在那里更新两个表.另一种方法是使用触发器来检测何时发生更改.但是,我回避触发器,更喜欢前两种选择.

我必须承认磁盘空间不是这些表的重要考虑因素.因此,存储数据两次没有问题,一次在历史记录中的结果中一次.仅在历史表中存储历史记录只是一个小调整,当前记录在“当前”表中.

这种方法的一个缺点是改变基表的结构.如果要添加列,则需要将其添加到历史表和基表中.

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...