문제

현재 애완 동물 프로젝트의 언어-독립적인 데이터베이스를 마이그레이션 라이브러리(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 따라하기 쉽고 전반적인 구조는 매우 청결합니다.

가장 큰 특징은 내가 찾는 것에 대해 이 같은 다음과 같습니다.

  1. 을 변경할 수 있는 기능을 트랜잭션에서 롤백이 있어야하는 문제입니다.(데이터 무결성 또는 그렇지 않으면)
  2. 를 볼 수 있는 능력을 실제로 생성된 SQL 스크립트를 해야 할 필요가 발생할
  3. 자동 rollback,오류가 발생한 경우에도 마지막 버전

내가 다른 요구 사항에 대한의 이동 키를 인덱스와 같은이지만,그것은 다음과 같 당신은 이미 처리됩니다.나를 위해 그것은 정말에 초점을 맞춘 컨트롤위는 실제 실행,그리고 빠르고,솔리드 철회 계획!

다른 팁

나는이 구문을 좋아한다. 샘플에서 구조 변경에 중점을 두었습니다. 그러나 데이터 조작은 어떻습니까?

마이그레이션 중에 데이터를 수정 해야하는 경우가 종종 있습니다 (예 : 일부 사전 데이터 추가).

각 개정이 데이터베이스에 적용되었는지 확인하는 기능을보고 싶습니다. 예를 들어 버전 3이 '미디어'를 추가했습니다. 그 이후로 버전 4 & 5는 데이터베이스에 추가되었지만 'Johnny Q Expert'라인을 따라 어딘가에 테이블 '미디어'를 삭제했습니다. 이제 '미디어'테이블 (더 이상 존재하지 않음)을 변경 해야하는 버전 6이 나옵니다. 검증 기능이 유용하여 버전에서 만들어진 모든 변경 사항이 데이터베이스에 표시되므로 다음 버전이있을 수 있습니다. 올바르게 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top