2012-03-23 54 views
5

我使用Symfony 2与Doctrine作为ORM框架。我正在寻找保存对数据库字段所做更改的最佳方法。我将有大约100个表格,每个表格有大约50个字段和一千行。现在我想保存对字段所做的所有更改。保存数据库字段更改 - 最佳实践?版本控制,可记录?

我想过的可能性: Doctrine扩展名“Loggable” - 将更改保存在不同的表中,但不知道它是否可以承担此数量的条目。

一个MySQL触发器对于保存在一个新表的变化各表?

但是,保存更改的最佳做法是什么?

回答

5

您可以使用MySQL的触发器或提到DoctrineExtension可记录的功能。两者都有作用,都有利弊。 MySQL触发器可以写入一个单独的表(请参阅mysql trigger FAQ)。

触发器:

  • ++框架,编程语言无关
  • ,当你想通过手工或通过脚本来修改数据++工程。
  • - 你必须为每个表编写触发器,或者必须找出SQL中的一些通用解决方案(我无法帮助)。
  • - 如果你不熟悉存储过程和PL/SQL,那么,有学习曲线

学说扩展:

  • ++只要把你的注释上的类和你”重做。
  • ++可以查询历史,通过资源库API还原更改
  • - 你把自己锁给供应商,这有时是有时不是问题
  • - 不工作,当你用手或第三方脚本修改数据。

如果将原则转换为别的东西的可能性很低,我会从原则扩展开始。这是一个具有帮助处理SQL的确切目的的工具。

0

这种事通常被称为“更改数据捕获”。它已经被问及与参考到MySQL之前,SO:

Change Data Capture in MySQL

也许这个回答可以帮助你。

不同的供应商使这种内置功能在不同程度上。

+0

我会尽力改进它。当然,“更改数据捕获”这个词语是值得的,因为OP可以采取这一措施并与之一起运行。 – duffymo 2012-03-23 19:40:59

1

我建议使用触发器去,特别是如果你希望你的日志记录功能保持独立于应用 - 也就是说,如果你决定要改写在不同的框架或完全不同的编程语言,你的应用程序,它仍然工作。

P.S.我不知道MySQL的触发器支持有多好,因为我在MySQL之前切换到了PostgreSQL。