Schema

架構遷移:SQL Server Data Tools 與 Liquibase 和 Flyway

  • October 13, 2016

這似乎是一個愚蠢的問題,但我一直在研究用於架構遷移的開源解決方案,即 Liquibase 和 Flyway。

但是,我的老闆告訴我,SQL Server Data Tools (SSDT) 可以完成同樣的工作。我不確定是否同意,但我在網際網路上幾乎找不到直接將其與 Liquibase 和/或 Flyway 進行比較的內容。

我的觀點是 SSDT 是 SQL Server 的開發、數據建模和設計工具,還支持模式比較(並生成其腳本)和原始碼控制。它解決了一個不同的問題,儘管在架構遷移的某些方面可能與 Liquibase/Flyway 有一些重疊。但作為一個整體架構遷移工具,Liquibase 和 Flyway 是完全專用的工具,而 SSDT 更多的是用於數據庫的設計和開發。

即使只是說沒有比較並且 SSDT 本身根本不是模式遷移工具,任何意見都將不勝感激。

SSDT 可與 Liquibase/Flyway 相媲美,因為它做了他們所做的事情,但採用了不同的方法。使用 SSDT,您擁有開發環境,因此您可以獲得諸如去定義、查找參考和智能感知以及將項目編譯到 dacpac 中然後將該 dacpac 部署到數據庫的能力。

進行部署的 SSDT 方式(和 redgate sql 比較方式)是聲明您想要的內容,因此如果您想更改如下所示的表:

create table a(id int)

到一個看起來像的表:

create table a(id int, another_column varchar(12))

使用 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 是一個專業的開發環境,這意味著我可以專注於編寫有用的程式碼和測試,而不是編寫升級腳本,而升級腳本本身只是達到目的的一種手段。

你徵求意見,所以你去:)

引用自:https://dba.stackexchange.com/questions/121683