MySQL表的基本版本控制

时间:2010-11-08 19:27:06

标签: php mysql version-control versioning

我正在尝试为网站上的静态html页面设置(我认为)相当简单的版本控制系统。目标是保留以前版本的内容,然后在需要时恢复它们(我猜基本上是创建一个与旧版本重复的新版本),并且可选择丢弃早于X版本的数据。

表的设置非常简单:

  • ID
  • reference_id(字符串/用于确定项目所属的页面)
  • 内容(文档/ html页面大小的数据量)
  • e_user(最后更改过的用户)
  • e_timestamp(当它被更改时)

我只想设置一些东西来为每个内容编辑创建一个以前的版本,然后能够在需要时恢复它。

实现这一目标的最佳方法是什么?一切都应该在同一个表格中,还是分散在几个不同的表格中?

我通读了几页关于这个主题的内容,但是很多内容对于我想要完成的事情来说似乎有些过分(ex http://www.jasny.net/articles/versioning-mysql-data/

是否有任何平台/指南可以帮助我做这个努力?

3 个答案:

答案 0 :(得分:5)

理想情况下,您希望同一个表中的所有内容与查询中的内容一起获取正确的版本,但是您应该小心如何执行此操作,因为低效的查询会给您的服务器带来额外的负担。如果通常你会选择这样一个项目:

SELECT * FROM your_table WHERE id = 42

这将成为:

SELECT * FROM your_table
WHERE id = 42 
AND date < '2010-10-12 15:23:24'
ORDER BY date DESC
LIMIT 1

索引(id, e_timestamp)以使其有效执行。

在单个查询中选择多行更加棘手,需要采用分组最大化方法,但可以完成。

答案 1 :(得分:4)

您可以使用称为“审核”的技术。您将设置审计表。然后,您可以将其写入代码或数据库端的设置触发器,以便每次进行更改时,都会在相应的审计表中添加一个条目。然后,您可以返回审计表并查看以下内容: “哦,昨天苏进去修了一个错字” “哦,史蒂夫今天早些时候意外地擦掉了一整段,同时试图重写这一部分”

存储数据的主表不会保留所有数据,因此可以保持苗条。如果您需要查看该数据并说回滚动,您可以查看审计表并执行此操作。您可以根据需要设置审计表,因此每个审计行可以在编辑之前拥有整个内容,而不仅仅是编辑的内容。这应该让“回滚”相当容易。

答案 2 :(得分:1)

添加版本列和删除列(bool)并创建一些函数来比较具有相同ID的行的版本。您肯定希望能够轻松找到当前版本和以前的版本。要删除数据,您需要编写另一个对所有版本的id进行排序的函数,找出哪些版本足够大,可以删除,并将其标记为由另一个函数删除。您可能希望有一个选项可以使某些页面免于删除或推迟它。