编程语言
首页 > 编程语言> > php-多个相关数据的修订控制

php-多个相关数据的修订控制

作者:互联网

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

这是一般的布局类型:

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可以有一个发布日期,并且我们基本上只跟踪日期(出于这个问题的目的,“ date”可以是数字,字符串或其他任何东西.我敢肯定会再次遇到此问题)

更改是批量提交的,当添加新数据时,items_released_dates_data中的所有内容都将首先删除item_id = your_id,然后使用insert语句添加新值(也许这不是最好的方法吗?)

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

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

使描述成为更新内容的简短摘要,包括json或xml之类的某种格式的数据,或者可以在客户端快速解码的某种格式的数据,以使用户可以查看更改并选择修订到给定的版本.然后,每个items_released_dates_data条目都还需要一个items_released_dates_data_history条目(听起来不像是一个问题吗?:|)

我已经阅读了一些有关mysql触发器的信息,这在这里会有所帮助,但是坦率地说,我对它们不了解,所以我正在使用我所了解的东西.

我的问题是,我是否遵循正确的方式来对此材料进行版本化,是否有人可以就如何改进此方法提供任何建议/最佳实践?

解决方法:

我支持亚历克斯·米勒的评论.到目前为止,您编写的所有内容都很有意义.

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

对于此类表,还应考虑使用存档存储引擎而不是MyISAM或InnoDB-它们是为此类工作而设计的.

另外,您可能正在寻找的搜索短语是“审计线索”.

标签:version-control,mysql,php,database
来源: https://codeday.me/bug/20191208/2094624.html