微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐