【问题标题】:Keeping a revision history with PHP and MySQL使用 PHP 和 MySQL 保持修订历史
【发布时间】:2023-03-09 08:01:02
【问题描述】:

我有几张表要保留修订历史记录。实现这一目标的最佳方法是什么?这将是几个字段(20 个左右)。

我是否应该创建一个重复的表并将旧数据提交给它?我应该使用触发器吗?还是应该创建一个单独的表并只跟踪所做的更改?

【问题讨论】:

  • 您要修改表格,还是修改表格中的数据?

标签: php mysql


【解决方案1】:

我们对每个版本化实体使用两个表的选择非常满意。

表格看起来类似于:

person:

  • id(PK)
  • 版本(乐观锁定计数器)
  • 当前(外键引用person_version
  • ...(任何不会改变的属性)

person_version

  • id(PK)
  • person(非空)(外键引用person
  • 时间戳(用于排序)
  • ...(任何可能更改的属性)

person_version 中的条目永远不会更改,因此很容易缓存它们(只要没有任何对可能更改的表的引用)

【讨论】:

    【解决方案2】:

    Propel 这样的一些 ORM 可以“本地”处理这种频繁的需求。

    检查versionable behavior

    • 它会自动将 version 列添加到“版本化”表(例如 mytable),并创建一个 mytable_version 表(肯定包含列 mytable_idversion)。

    • 它提供了一个简单的 API 来查询版本化的表。例如,当您执行 $myobject->save(); 时,它会自动填充表 mytable_version 并相应地更新字段 mytable.version

    【讨论】:

      【解决方案3】:

      这是我几个月前问过的问题,但我会再次这样做

      Database entries modification history

      【讨论】:

      • 我想过这样做,我可能会这样做。只是想看看有没有其他选择。
      • 对此我确实有一个问题。在数据字段中,您是仅对更改的数据进行序列化还是对所有数据进行序列化?如果只是更改的数据,您如何确定哪些数据实际更改了?
      • 我在更新之前序列化所有数据,这样它可以适应表结构的变化
      【解决方案4】:

      您可以在表中添加另一列来跟踪条目 ID,而活动 PK 则是修订 ID。 revision-id 最高的是最新的活动记录,其他具有相同 entry-id 的条目是以前的修订。

      【讨论】:

      • 我打算这样做,但问题是还有其他表链接到该表的主键。所以如果我插入一个新行,关系就会中断。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多