我有一个数据库,其中包含Symfony Web应用程序所需的表以及仅客户端用户所需的其他表。这种情况使事情变得复杂:使数据库在维护开发环境和生产环境之间以及保持同步方面具有挑战性。
应用程序所需表的数据库结构已使用Doctrine ORM创建,因此已映射到Entity类,并且通过数据库迁移都能很好地维护。
但是,客户端用户有时可能会向数据库中添加新表(甚至需要将新字段添加到ORM当前映射的表中)。
我想最好的办法是,如果客户端可以将其表保存在单独的数据库中-不幸的是,我认为我们不能走这条路。
我最初是在考虑为客户端创建第二个数据库,并使用触发器使数据保持同步。但是,我意识到触发器是性能的杀手。它们可能会导致数据完整性问题;每当一端或另一端发生结构性变化时,都必须更新触发器。
最好的办法是将应用程序表与客户端表区分开,例如带前缀?然后在Doctrine中创建一个模式过滤器以忽略具有特定前缀的表?
doctrine:
dbal:
schema_filter: ~^(?!prefix_)~
或者是否有更好的做法可以将映射的ORM实体与非映射表/字段结构分开?