我们有一个模块化应用程序,每个应用程序创建自己的表(通常是一个两个)并管理数据。
我们在主应用程序中使用Flyway,但我们的模块也需要它。但是,如果我们将补丁添加到主应用程序,如果未安装相应的模块,ALTER TABLE查询将无法用于某些部署。
解决此问题的一种方法是使用多个Flyway操作执行模式演变,每个模块都有自己的Flyway并自行管理。然而,由于Flyway创建了用于管理状态的表,因此我们现在有大约20个模块,所以我们得到了太多的表。
解决这个问题的优雅方法是什么?
答案 0 :(得分:0)
我想说,它支持的软件单元管理的迁移是最干净的,并且胜过“太多表”。就这些表的整洁组织而言,您可以使用模式(如果您使用RDBMS支持这些表)来使用它们,并且Flyway允许您命名每个迁移受管应用程序使用的表。
这里的关键是“模块”。根据您的描述,听起来并非所有应用程序都由相同的模块组成。我会问你,如果我们努力使我们的模块专用于创建解耦/可重用软件 - 为什么这些模块的数据库模式应该被区别对待?
为了解决你对“太多桌子”的担忧,让我们尝试揭穿它的成本。
我们的自然冲动是聚合相关的事情,但并不总能带来最好的结果,所以我们必须务实。在这种情况下,良好/灵活的设计胜过聚合。