php - 多条关联数据的修订控制

标签 php mysql database version-control

我正在尝试弄清楚如何最好地保留关于多行数据修订的修订/历史信息,以防出于某种原因我们需要恢复到该数据。

这是一般的布局:

item
---------------
id
title
etc...

region
---------------
id
title
etc...

release_type
-----------------
id
title
etc...

items_released_dates_data
---------------------
item_id
region_id
release_type_id (these three form the primary key)
date

因此您可以为每个项目设置一个发布日期 + region_id + release_type 并且我们基本上只跟踪日期(对于这个问题,“日期”可以是数字、字符串或其他任何内容。我确定再次遇到这个问题)

批量提交更改,当添加新数据时,items_released_dates_data 中的所有内容首先被删除,其中 item_id=your_id,然后插入语句添加新值(也许这不是执行此操作的最佳方法?)

我的想法是创建一个像这样的表:

items_release_dates_data_history
-------------------------------------
item_id
timestamp
description
raw_data

对更新的内容做一个简短的描述,包括一些格式的数据,比如 json 或 xml 或可以在客户端快速解码的东西,让用户回顾变化并选择修改给定的版本。然后 items_released_dates_data 的每个条目也需要 items_released_dates_data_history 的条目(听起来不像是一个问题吗?:|)

我已经阅读了一些关于 mysql 触发器的内容,这些内容在这里会有帮助,但坦率地说,我对它们一无所知,所以我正在使用我所了解的内容。

我的问题是,我是否按照正确的路径对这些东西进行版本化,是否有人可以就如何改进此方法提供任何建议/最佳实践?

最佳答案

我支持 Alex Miller 的评论。到目前为止,您写的一切都有意义。

尽管您有所保留,但我还是强烈建议您研究一下触发器。它们相当容易掌握,并且在这种情况下成为非常强大的工具。使用触发器,您可以在每次更新(或删除)记录时将行的副本存储到单独的表中。如果您想全神贯注,您可以在触发器内将传入数据与现有数据进行比较,并仅写入更改的内容。

对于这些类型的表,还可以考虑使用 Archive 存储引擎而不是 MyISAM 或 InnoDB - 它们就是为这类工作而设计的。

此外,您可能要查找的搜索短语是“审计跟踪”。

关于php - 多条关联数据的修订控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4565403/

相关文章:

java - Android SQLite 查询顺序问题

php - 数据库:排序分层数据(修改后的预序树遍历):如何检索直系子级

php - Laravel 5.1 队列中没有模型的查询结果

mysql - 如何让 friend 的 friend 的 friend ...

javascript - PHP 或 JS 正则表达式来解析 javascript 函数

mysql - 需要随机更新一列。但随机值被枚举

mysql - 为下表编写 SELECT 查询

mysql - 缓慢的 MySQL SELECT 性能

php - 在数学运算中使用 PHP preg_replace 匹配结果?

php - Symfony2/Doctrine 2 - 转义密码中的特殊字符