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



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

我思考的可能性:条令扩展"可记录"-将更改保存在不同的表中,但不知道它是否能负担得起这么多条目。

将更改保存到新表中的每个表的MySQL触发器?

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

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

触发器:

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

条令扩展:

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

如果将学说转换为其他学说的可能性很低,我会从学说扩展开始。毕竟,这是一个有确切目的的工具,可以帮助处理SQL。

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

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

这样的事情通常被称为"更改数据捕获"。之前有人在SO:上提到过MySQL

MySQL 中的变更数据捕获

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

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

下面的文章有一个逐步的解释+使用触发器进行版本控制的示例代码。

http://www.jasny.net/articles/versioning-mysql-data/

最新更新