我正在使用带有条令的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/