SSDT는 다른 방식으로 접근하지만 Liquibase / Flyway와 비교할 수 있습니다. SSDT를 사용하면 개발 환경을 구축 할 수 있으므로 프로젝트를 dacpac로 컴파일 한 다음 dacpac을 데이터베이스에 배포 할 수있을뿐만 아니라 정의로 이동하여 참조 및 인텔리전트를 찾을 수 있습니다.
deloyment를 수행하는 SSDT 방식 (및 redgate sql compare 방식)은 다음과 같은 테이블을 변경하려는 경우 원하는 것을 선언하는 것입니다.
create table a(id int)
다음과 같은 테이블에
create table a(id int, another_column varchar(12))
SSDT를 사용하면 테이블 정의를 두 번째로 변경하고 SSDT가 업그레이드 방법에 대해 걱정하게하십시오 (테이블을 변경하거나 열을 추가하거나 열 순서를 변경하여 테이블을 다시 작성해야 함).
Liquibase (DbUp, ReadyRoll, 수동 방법 등)를 사용하면이 경우 alter table을 직접 작성하고 스크립트를 올바른 순서로 실행해야합니다. 다음 시나리오를 고려하십시오.
- 릴리스 1-테이블에 hello 열 작성
- 릴리스 2-열 hello의 이름을 joe_blogs로 바꿉니다.
- 릴리스 3-joe_blogs 열 이름을 hello로 변경
- 릴리스 4-joe_blogs 열 작성
릴리스 중 하나라도 빠지면 다음 릴리스 중 어느 것도 계속할 수 없습니다.
업그레이드 스크립트의 장점 (Liquibase, DbUp 등) :
- 스크립트를 완전히 제어 할 수 있습니다
- DBA / 개발자는 이것에 익숙합니다.
비교 / 병합의 장점 (SSDT, Redgate SQL 비교) :
- 업그레이드 스크립트를 작성할 필요가 없습니다
- 특정 버전으로 쉽게 이동하여 해당 버전을 비교하고 병합하기 만하면됩니다
업그레이드 스크립트의 단점 :
- 순서대로 실행해야합니다
- 실수하지 않고 인간에게 의지하십시오
- 변경 사항이 많은 경우 특히 느려질 수 있습니다
- 팀이 다른 환경 (개발, 테스트, 스테이징, 자극 등)에서 고도로 훈련 된 데이터베이스가 아닌 한 테스트가 유효하지 않게되는 경우가 종종 있습니다
- 릴리스를 다운 그레이드한다는 것은 이미 작성한 모든 스크립트의 역순을 쓰는 것을 의미합니다
비교 / 병합 사용의 단점 :
- 도구는 100 % 신뢰할 수 없으며 불공평 할 수 있습니다
- SSDT에는 작업중 인 프로젝트가 필요합니다. 많은 많은 데이터베이스에 실제로 컴파일하거나 실행하지 않는 코드가 있습니다 (삭제 된 테이블을 생각하지만 절차는 아닙니다). 나는 상속받은 약 8/10 데이터베이스에서 이것을 보았습니다 :)
- 많은 DBA / 개발자는 SSMS / 메모장 개발을 포기하는 것을 주저합니다
개인적으로 저는 SSDT가 전문 개발 환경이라고 생각합니다. 이는 결국 그 자체로 목적을 달성 할 수있는 업그레이드 스크립트를 작성하는 대신 유용한 코드 및 테스트 작성에 집중할 수 있음을 의미합니다.
당신은 의견을 요구했습니다.
에드