3

我的项目概念是将一些问题插入数据库并提供人们提供的答案。但是,这些问题和管理员可以稍后由管理员修改(甚至删除它们)

我需要恢复答案和问题。但是,我需要检索确切的问题和答案,这意味着即使管理员已在数据库中更改了确切的问题。

那是一种保存问题和答案状态的历史管理器。

我可以管理整个数据库历史等。但是有没有更聪明的方法来管理它?

4

2 回答 2

0

首先,你不应该在这种情况下删除东西。在每一行上创建一个布尔标志并将其设置为 1 以标记删除,然后在考虑此标志的同时执行所有查询。这将允许您将内容“标记”为已删除,而不是实际从数据库中修剪。

这还具有不会完全混淆您的外键关系或雪崩删除您想要保留的内容的优点。

从那里,您可能想要查看数据库触发器。这些允许您对某些操作(更新、插入、删除)运行预存储的语句。这可以让您保留更改的“日志表”。

于 2013-04-10T09:43:51.467 回答
0

解决方案1.triggers

最简单的解决方案(取决于您的特定需求)可能是在您的表中添加一个 on update/insert/delete 触发器,这样您就可以在插入/更新/删除数据时执行额外的日志记录。这样即使是对数据库的手动干预也将被覆盖......

查看http://dev.mysql.com/doc/refman/5.1/en/triggers.html了解更多信息。

解决方案 2。

保存版本历史的一种简单方法是创建一个基本相同的表(例如,带有 _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

从源头

于 2013-04-10T09:45:40.853 回答