Database 保存数据库字段更改-最佳做法?版本控制,可记录?

Database 保存数据库字段更改-最佳做法?版本控制,可记录?,database,symfony,doctrine,Database,Symfony,Doctrine,我使用Symfony 2和条令作为ORM框架。我正在寻找保存对数据库字段所做更改的最佳方法。我将有大约100个表,每个表有大约50个字段和大约1000行。现在我想保存对字段所做的所有更改 我想到的可能性: 条令扩展“Loggable”-将更改保存在另一个表中,但不知道它是否能够承受如此多的条目 每个表都有一个MySQL触发器,用于在新表中保存更改 但是保存更改的最佳实践是什么呢?这种事情通常被称为“更改数据捕获”。之前有人问过关于MySQL的问题,所以: 也许这个答案可以帮助你 不同的供应商在

我使用Symfony 2和条令作为ORM框架。我正在寻找保存对数据库字段所做更改的最佳方法。我将有大约100个表,每个表有大约50个字段和大约1000行。现在我想保存对字段所做的所有更改

我想到的可能性: 条令扩展“Loggable”-将更改保存在另一个表中,但不知道它是否能够承受如此多的条目

每个表都有一个MySQL触发器,用于在新表中保存更改


但是保存更改的最佳实践是什么呢?

这种事情通常被称为“更改数据捕获”。之前有人问过关于MySQL的问题,所以:

也许这个答案可以帮助你


不同的供应商在不同程度上将此作为一种内置功能。

我建议使用触发器,特别是如果您希望日志功能保持应用程序独立性,也就是说,即使您决定在不同的框架或完全不同的编程语言上重写应用程序,它也会起作用


另外,我不知道MySQL中对is触发器的支持有多好,因为我在MySQL拥有它们之前就切换到了PostgreSQL。

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

触发因素:

  • ++框架,独立于编程语言
  • ++当您希望手动或通过脚本修改数据时,此功能将起作用
  • --您必须为每个表编写触发器,或者必须在SQL中找到一些通用的解决方案(对此我无能为力)
  • --如果您不熟悉存储过程和PL/SQL,那么就有学习曲线
条令扩展:

  • ++只需在类上添加注释,就完成了
  • ++您可以通过存储库API查询历史记录、恢复更改
  • --你把自己锁定在一个供应商那里,这有时是,有时不是问题
  • --手动或使用第三方脚本修改数据时不起作用

如果将条令转换为其他条令的机会很低,我会从条令扩展开始。毕竟,这是一个帮助处理SQL的工具。

下面的文章提供了使用触发器进行版本控制的分步说明+示例代码


我会努力改进的。当然,“更改数据捕获”这句话本身是值得的,因为OP可以接受它并与之一起运行。