架构迁移:SQL Server Data Tools 与 Liquibase 和 Flyway

Neo*_*Neo 11 schema migration ssdt

这似乎是一个愚蠢的问题,但我一直在研究模式迁移的开源解决方案,即 Liquibase 和 Flyway。

但是,我的老板告诉我 SQL Server Data Tools (SSDT) 可以完成同样的工作。我不确定是否同意,但我在互联网上几乎找不到直接将其与 Liquibase 和/或 Flyway 进行比较的内容。

我的观点是SSDT是SQL Server的开发、数据建模和设计工具,还支持模式比较(及其生成脚本)和源代码控制。尽管在模式迁移的某些方面可能与 Liquibase/Flyway 有一些重叠,但它解决了一个不同的问题。但作为整体架构迁移工具,Liquibase 和 Flyway 是完全专用的工具,而 SSDT 则更多用于数据库的设计和开发。

即使只是说没有比较并且 SSDT 本身根本不是模式迁移工具,任何意见也将不胜感激。

Ed *_*ott 18

SSDT 与 Liquibase/Flyway 相当,因为它做了他们所做的,但采用了不同的方法。有了 SSDT,您就拥有了开发环境,因此您可以获得诸如转到定义、查找引用和智能感知以及将项目编译到 dacpac 然后将该 dacpac 部署到数据库的能力。

进行部署的 SSDT 方式(和 redgate sql 比较方式)是声明您想要的内容,因此如果您想更改如下所示的表:

create table a(id int)
Run Code Online (Sandbox Code Playgroud)

到一个看起来像的表:

create table a(id int, another_column varchar(12))
Run Code Online (Sandbox Code Playgroud)

使用 SSDT,您只需将表定义更改为第二个,让 SSDT 担心如何升级它(它可以执行更改表、添加列或更改列顺序,因此您需要重建表等)。

使用 Liquibase(DbUp、ReadyRoll、手动方法等),在这种情况下,您必须自己编写更改表并确保以正确的顺序运行脚本,请考虑以下场景:

  1. 版本 1 - 在表上创建列 hello
  2. 第 2 版 - 将列 hello 重命名为 joe_blogs
  3. 版本 3 - 将列 joe_blogs 重命名为 hello
  4. 第 4 版 - 创建列 joe_blogs

如果错过任何一个版本,下一个版本都不能继续。

升级脚本(Liquibase、DbUp 等)的好处:

  • 您可以完全控制脚本
  • DBA / 开发人员已经习惯了这一点

比较/合并的好处(SSDT、Redgate SQL 比较):

  • 不用写升级脚本
  • 只需比较并合并该版本即可轻松获得任何特定版本

升级脚本的缺点:

  • 必须按顺序运行
  • 靠人不犯错
  • 可能会很慢,特别是如果你有很多变化
  • 除非您的团队在不同环境(开发、测试、登台、生产等)中非常严格的数据库经常变得不同步,从而使任何测试无效
  • 降级版本意味着编写与您已经编写的所有脚本相反的脚本

使用比较/合并的缺点:

  • 工具不是 100% 信任的,也许是不公平的
  • SSDT 需要一个工作项目,许多数据库的代码实际上并没有编译或运行(想想删除的表而不是过程等),我在我继承的大约 8/10 个数据库中看到了这一点:)
  • 许多 DBA / 开发人员对放弃在 SSMS / 记事本中的开发犹豫不决

就我个人而言,我真的认为 SSDT 是一个专业的开发环境,这意味着我可以专注于编写有用的代码和测试,而不是编写本身只是达到目的的手段的升级脚本。

你征求意见,所以你去:)

编辑

  • 没有“SQL 服务器数据工具”:) (3认同)
  • SSIS 旨在移动数据,因此支持与多种系统的“连接”。SSDT旨在用于SQL Server数据库项目的开发和维护。它有一个构建过程,可以检查目标 SQL Server 版本的脚本兼容性,并检查所有引用、过程等的 T-SQL 语法。 (2认同)