gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:35:40 25 4
gpt4 key购买 nike

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

这些变化很少发生。

理想情况下是这样的:-

 (original table fields) | revision_version | origin | user | timestamp

假设我有一个名为 posts 的表,其架构如下:-

title | description | timestamp | author

将因此创建一个名为 posts_revisions 的附加表:-

title | description | timestamp | author | revision_version | origin | user | timestamp
  • origin 是更改的来源,无论是机器人、用户生成的还是您拥有的。

您可以想象这是对现有数据库的相当大的更改,我目前担心的是为每个查询检查 _revisions 表的性能影响。这是这种事情的最佳实践吗?

最佳答案

对于这类问题,我保留了一张当前表和一张历史表。

历史表有以下附加列:

  • 历史ID
  • 生效日期
  • 结束日期
  • 版本号
  • 创建者
  • 创建时间

生效日期和结束日期是值有效的时间跨度。每次记录发生更改时,版本都会增加。 id、CreatedAt 和 CreatedBy 是我放入数据库中几乎每个表中的列。

通常,我会通过每晚的作业使历史表保持最新,比较表,然后使用 MERGE 合并数据。另一种方法是将所有更改包装在存储过程中,并在那里更新两个表。另一种选择是使用触发器,它可以检测何时发生更改。但是,我回避触发器,更喜欢前两种选择。

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

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

关于mysql - SQL 数据库中数据修订控制的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11777820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com