如何保存MySQL中的记录更新历史记录?

Pro*_*ium 23 php mysql logging frameworks

我必须在PHP中创建一个代码,这将允许我保留MySQL数据库中记录更新的历史记录,以便我可以按日期查找旧版本.

以下是我实际想要实现的例子:http://en.wikipedia.org/w/index.php? title = Tunisia&action = history

数据主要是我们记录的关于公司生成报告和提取指数的数字.

我计划使用codeigniter,因为它很简单,我正在寻找一个框架或开源项目的想法,它使用相同的方法来保存数据库中的修改历史.

wim*_*vds 19

最简单的解决方案(取决于您的特定需求)可能是为您的表添加更新/插入/删除触发器,因此您可以在插入/更新/删除数据时执行额外的日志记录.这样就可以覆盖对数据库的人工干预......

有关详细信息,请查看http://dev.mysql.com/doc/refman/5.1/en/triggers.html.


rek*_*o_t 11

保持版本历史记录的一种简单方法是创建基本相同的表(例如,使用_version后缀).这两个表都有一个版本字段,对于主表,您为每次更新都会增加.版本表将具有复合主键(id, version).

每当您对实际表进行更新时,您还会在版本表中插入包含重复数据的新行.每当您想要查找版本历史记录时,您需要做的就是诸如此类SELECT * FROM content_version WHERE id = CONTENT_ID ORDER BY version.

如果您使用Doctrine ORM之类的东西,它会有一种行为,可以通过事件侦听器自动执行此操作.你可以在这里查看:http://www.doctrine-project.org/documentation/manual/1_2/en/behaviors#core-behaviors : versionable

  • 为什么不这样:`main table`只包含`id`和`version_id``version`表包含所有数据? (8认同)

小智 6

有一个开源(MIT许可证)框架来构建CRM和ERP类型的数据库驱动的Web应用程序.您也可以从SourceFroge上http://epe.si/下载EPESI:http://sourceforge.net/projects/epesi/

EPESI的CRUD引擎 - 记录浏览器 - 具有非常有效的记录历史以及其他功能,如高级权限系统(下至现场级别)等等.

单个记录集将数据存储在多达10个表中,并且与数据库无关(使用PHPAdoDB).名为recordset_data的表存储"原始"数据和更改历史记录存储在另外2个表中:recordset_edit_historyrecordset_edit_history_data.

Record的edit_history具有以下结构:

  • ID(此表的主键,索引)
  • 编辑(时间戳:2008-05-14 15:18:15)
  • 编辑:(用户名)

Record的edit_history_data具有以下结构:

  • edit_id =编辑历史记录中的ID
  • field =已更改字段的名称
  • old_value =已更改字段的值.

它是一个非常快速和高效的引擎,它存储的变化不是记录,而是存储在单个字段级别.


the*_*man 1

这并不是记录实际的 SQL 更新。它正在记录数据的更新。它实际上会存储页面的每个修订版本,并且默认情况下仅提供最新版本。用于它的 SQL 代码未存储。

\n\n

因此,您将不得不采取类似的方法。每次数据发生变化时,您都需要弄清楚数据是如何变化的并存储这个“补丁”数据。您可能最好存储最新版本,而不是必须完成所有补丁才能获得它。这意味着您将能够看到类似的内容

\n\n
! created file\n* added data to cell D4 'product descript' D5 'set of pens' E5 '\xc2\xa35.99'\n* added data to cell D6 'toaster' E5 '\xc2\xa310'\n& changed data in cell D4 'Product Description'\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些更改中的每一个都需要用时间戳或完成时间来存储。您还需要制定自己的方案来存储数据更改。

\n\n

另一个更简单的解决方案是使用 wiki 引擎,如果您愿意在网页中工作,它可以提供您想要的所有功能。您可能需要花费一些时间来使其更好地满足您的需求,让人们从更完整的视图(而不是原始 wiki)对其进行编辑。

\n