在我的情况下,我使用生成SQL语句的工具来包含所有数据库init / create语句。 Flyway如何提供超出我的工具提供的价值?我为什么要关心编写手工编写的迁移脚本来使用Flyway?
答案 0 :(得分:1)
上面的问题混合了两个应该分开的东西:数据库创建的概念与迁移的概念相结合。
数据库创建
给定一个完整的数据库和一个空数据库,您可以使用许多工具来生成重新创建不存在任何内容的完整数据库所需的脚本。在Flyway术语中,您只需创建一个基线。这根本不是迁移的概念。当然,给定一个V2.0数据库,您可以看到任何V1.0数据库,将其吹走,并安装V2.0数据库,但现在您已经丢失了数据。
<强>迁移强>
给定一个完整的数据库V2.0和一个V1.0旧数据库,并且您希望使V1.0数据库得到升级&#34;到V2.0。在数据库领域,这称为迁移,因为现有的1.0数据需要以在V2.0上运行的方式进行重新排列。现在你需要一个不仅创建/改变表的脚本,你需要一个脚本来做一些ETL(提取数据,转换数据以便能够加载到新的表结构中,将旧数据库改为新的表结构,然后将数据加载到数据库中)。取决于,这可能是也可能不是微不足道的。您构建脚本来执行此操作,Flyway将管理执行该脚本。
<强>迁飞强>
Flyway可实现以下目标:
要好好使用Flyway,需要更改工作流程:每次在开发人员数据库中进行更改时,请将更改放入迁移脚本中,以便针对世界上存在的所有旧数据库版本执行这些更改。这些脚本会被检入您的应用程序的源代码中,使迁移成为您软件资产的一等公民,就像任何其他功能一样。
答案 1 :(得分:0)
这在很大程度上取决于您的用例,
如果您打算编写一个简单的应用程序,其数据库结构将在应用程序的生命周期内保持静态,那么它将增加很少的价值。
如果期望项目在其生命周期内具有动态设计,并且架构上发生了变化,则Flyway提供了一种正式结构,其中可以表达和查看更改。如果您最终有一个更大的团队在项目上工作,这个正式的结构也会非常有用,因为Flyway可以成为框架的一部分来处理多模式CI工作。
一个关键的事情是你不必从Flyway开始,你可以在以后添加它,通常只有有限的重组,因为那个时间点的模式将成为你未来所有变化的基线添加。