.NET 데이터베이스를 마이그레이션 도구
-
05-09-2019 - |
문제
현재 애완 동물 프로젝트의 언어-독립적인 데이터베이스를 마이그레이션 라이브러리(Wizardby Google 코드).그것은 꽤 많은 영감을 ActiveRecord 마이그레이션,그러나 몇 가지 정확 있습니다.예를 들어,몇 가지 기본적인"유형추를"그래서 당신이 있지 않는 형식을 지정 FK 열입니다.그것은 또한 충분히 스마트를 생성하"다운그레이드"스크립트만 주어진"업그레이드"sequence.지 마이그레이션을 작성에 특별한 DSL,이 도구를 것을 목표로하고 있습니다.NET 프로젝트입니다.그것은 또한 데이터베이스 플랫폼-독립적입니다.
여기에의 정보를 확인하실 수 있습니다.의 문법:
migration "Blog" revision => 1:
type-aliases:
type-alias N type => String, length => 200, nullable => false, default => ""
defaults:
default-primary-key ID type => Int32, nullable => false, identity => true
version 1:
add table Author:
FirstName type => N
LastName type => N
EmailAddress type => N, unique => true
Login type => N, unique => true
Password type => Binary, length => 64, nullable => true
add table Tag:
Name type => N
add table Blog:
Name type => N
Description type => String, nullable => false
add table BlogPost:
Title type => N
Slug type => N
BlogID references => Blog
AuthorID references => Author
add table BlogPostTagJunction primary-key => false:
BlogPostID references => BlogPost
TagID references => Tag
version 2:
add table BlogPostComment:
BlogPostID references => BlogPost
AuthorEmailAddress type => N
Content type => String, nullable => false
version 3:
add table Media:
TypeID type => Int32
Name type => N
MimeType type => N
Length type => Int32
BlogPostID nullable => true, references => BlogPost
BlogPostCommentID nullable => true, references => BlogPostComment
add table User:
Login type => String, length => 200, nullable => false
Password type => Binary, length => 64, nullable => false
index IX_Login columns => [ID, [Login, desc]], unique => true
version 4:
add table Forum:
Name type => String, length => 200, nullable => false
add column ModeratorUserID nullable => false, references => User
version 5:
remove index IX_Login table => User
version 6:
add index IX_Login table => User, columns => [ID, [Login, desc]], unique => true
version 7:
BlogAuthorJunction primary-key => false:
BlogID references => Blog
AuthorID references => Author
execute native-sql upgrade-resource => InsertSeedData, downgrade-resource => DeleteSeedData
제가 알기로는 기타 마이그레이션 라이브러리가 있지만,어이,그것은 애완 동물 프로젝트!
질문입니다:어떤 기능은 당신이 기대에서 데이터베이스를 마이그레이션 툴킷에서 일반 및 무슨 말을 할 수 있습니다 이 강아지는 구문인가요?
해결책
의 모습에서 그것을 말하는 것입니다 farily 따라하기 쉽고 전반적인 구조는 매우 청결합니다.
가장 큰 특징은 내가 찾는 것에 대해 이 같은 다음과 같습니다.
- 을 변경할 수 있는 기능을 트랜잭션에서 롤백이 있어야하는 문제입니다.(데이터 무결성 또는 그렇지 않으면)
- 를 볼 수 있는 능력을 실제로 생성된 SQL 스크립트를 해야 할 필요가 발생할
- 자동 rollback,오류가 발생한 경우에도 마지막 버전
내가 다른 요구 사항에 대한의 이동 키를 인덱스와 같은이지만,그것은 다음과 같 당신은 이미 처리됩니다.나를 위해 그것은 정말에 초점을 맞춘 컨트롤위는 실제 실행,그리고 빠르고,솔리드 철회 계획!
다른 팁
나는이 구문을 좋아한다. 샘플에서 구조 변경에 중점을 두었습니다. 그러나 데이터 조작은 어떻습니까?
마이그레이션 중에 데이터를 수정 해야하는 경우가 종종 있습니다 (예 : 일부 사전 데이터 추가).
각 개정이 데이터베이스에 적용되었는지 확인하는 기능을보고 싶습니다. 예를 들어 버전 3이 '미디어'를 추가했습니다. 그 이후로 버전 4 & 5는 데이터베이스에 추가되었지만 'Johnny Q Expert'라인을 따라 어딘가에 테이블 '미디어'를 삭제했습니다. 이제 '미디어'테이블 (더 이상 존재하지 않음)을 변경 해야하는 버전 6이 나옵니다. 검증 기능이 유용하여 버전에서 만들어진 모든 변경 사항이 데이터베이스에 표시되므로 다음 버전이있을 수 있습니다. 올바르게 적용됩니다.