SSDT có thể so sánh với Liquibase / Flyway vì nó làm những gì họ làm nhưng bằng cách thực hiện một cách tiếp cận khác. Với SSDT, bạn có môi trường phát triển để bạn có được những thứ như định nghĩa, tìm tài liệu tham khảo và ý nghĩa nội bộ cũng như khả năng biên dịch dự án thành dacpac và sau đó triển khai dacpac đó vào cơ sở dữ liệu.
Cách SSDT (và sắp xếp lại cách so sánh sql) để thực hiện một sự phân chia là khai báo những gì bạn muốn vì vậy nếu bạn muốn thay đổi một bảng trông giống như:
create table a(id int)
đến một bảng trông giống như:
create table a(id int, another_column varchar(12))
với SSDT, bạn chỉ cần thay đổi định nghĩa bảng của mình sang bảng thứ hai và để SSDT lo lắng về cách nâng cấp nó (có thể thay đổi bảng, thêm cột hoặc thay đổi thứ tự cột để bạn cần xây dựng lại bảng, v.v.).
Với Liquibase (DbUp, ReadyRoll, phương thức thủ công, v.v.) những gì bạn làm là trong trường hợp này phải tự viết bảng thay đổi và đảm bảo rằng bạn chạy các tập lệnh theo đúng thứ tự, hãy xem xét kịch bản này:
- Phát hành 1 - tạo cột xin chào trên bàn
- Phát hành 2 - đổi tên cột xin chào thành joe_bloss
- Phát hành 3 - đổi tên cột joe_bloss để chào
- Phát hành 4 - tạo cột joe_bloss
Nếu bất kỳ bản phát hành nào bị bỏ lỡ, không có bản nào tiếp theo có thể tiếp tục.
Lợi ích của các tập lệnh nâng cấp (Liquibase, DbUp, v.v.):
- Bạn có toàn quyền kiểm soát các tập lệnh
- DBA's / Developers đã quen với điều này
Lợi ích của việc so sánh / hợp nhất (SSDT, Redgate SQL So sánh):
- Không phải viết kịch bản nâng cấp
- Thật dễ dàng để đến bất kỳ phiên bản cụ thể nào, chỉ cần so sánh và hợp nhất phiên bản đó
Hạn chế của các kịch bản nâng cấp:
- Phải được chạy theo thứ tự
- Dựa vào con người không phạm sai lầm
- Có thể chậm đặc biệt là nếu bạn có nhiều thay đổi
- Trừ khi nhóm của bạn là các cơ sở dữ liệu rất kỷ luật trong các môi trường khác nhau (dev, test, staging, prod, v.v.) thường không đồng bộ hóa khiến mọi thử nghiệm không hợp lệ
- Hạ cấp một bản phát hành có nghĩa là viết ngược lại tất cả các tập lệnh bạn đã viết
Hạn chế của việc sử dụng so sánh / hợp nhất:
- Công cụ không đáng tin cậy 100%, có lẽ không công bằng
- SSDT yêu cầu một dự án làm việc, nhiều cơ sở dữ liệu có mã không thực sự biên dịch hoặc chạy (nghĩ rằng các bảng bị rớt nhưng không làm thủ tục, v.v.), tôi đã thấy điều này trong khoảng 8/10 cơ sở dữ liệu tôi đã kế thừa :)
- Nhiều nhà phát triển / nhà phát triển của DBA ngần ngại từ bỏ việc phát triển trong SSMS / notepad
Cá nhân tôi thực sự nghĩ rằng SSDT là một môi trường phát triển chuyên nghiệp và điều đó có nghĩa là tôi có thể tập trung vào việc viết mã và kiểm tra hữu ích thay vì viết các kịch bản nâng cấp mà bản thân chúng chỉ là phương tiện để kết thúc.
Bạn hỏi ý kiến để bạn đi :)
ed