我正在尝试为网站上的静态html页面设置(我认为)相当简单的版本控制系统。目标是保留以前版本的内容,然后在需要时恢复它们(我猜基本上是创建一个与旧版本重复的新版本),并且可选择丢弃早于X版本的数据。
表的设置非常简单:
我只想设置一些东西来为每个内容编辑创建一个以前的版本,然后能够在需要时恢复它。
实现这一目标的最佳方法是什么?一切都应该在同一个表格中,还是分散在几个不同的表格中?
我通读了几页关于这个主题的内容,但是很多内容对于我想要完成的事情来说似乎有些过分(ex http://www.jasny.net/articles/versioning-mysql-data/)
是否有任何平台/指南可以帮助我做这个努力?
答案 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进行排序的函数,找出哪些版本足够大,可以删除,并将其标记为由另一个函数删除。您可能希望有一个选项可以使某些页面免于删除或推迟它。