Frage

Mein aktuelles Lieblingsprojekt ist eine sprachunabhängige Datenbank-Migration-Bibliothek ( Wizardby auf Google Code). Es ist ziemlich viel von Active Migrations inspiriert, hat aber ein paar Nettigkeiten. Zum Beispiel hat einige grundlegende „Typinferenz“ so dass Sie nicht den Typ eines FK Spalte angeben. Es ist auch klug genug „Herabstufung“ Skripte nur Folge „Upgrade“ gegeben zu erzeugen. Obwohl Migrationen in einem speziellen DSL geschrieben wird, wird dieses Tool in erster Linie auf .NET-Projekten ausgerichtet. Es ist auch Datenbank-plattformunabhängig.

Hier ist ein kurzer Blick auf die Syntax:

  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

Ich bin mir dessen bewusst andere Migration Bibliotheken gibt, aber hey, es ist ein Lieblingsprojekt!

Die Frage ist: Welche Eigenschaften erwarten Sie von Datenbank-Migration Toolkits im Allgemeinen erwarten, und was kann man sagen, über diese besondere Welpen Syntax-weise?

War es hilfreich?

Lösung

Von den Blicken von ihm Ich muss sagen, dass es farily leicht zu folgen und insgesamt sieht die Struktur ziemlich sauber.

Die größten Features, die ich suche in etwa wie folgt lauten wie folgt.

  1. Die Fähigkeit, Änderungen in einer Transaktion ein Thema Rollback sollte es sein. (Datenintegrität oder anderweitig)
  2. Möglichkeit, die tatsächlichen generierten SQL-Skripts zu sehen, sollte die Notwendigkeit entstehen
  3. Automatische Rollback, wenn ein Fehler auftritt, zur letzten Version

Ich habe andere Anforderungen in Bezug auf den Bewegungs des Schlüssels, Indizes und das so, aber es sieht aus wie Sie haben, dass bereits behandelt. Für mich ist es wirklich auf den Kontrollen konzentriert um die tatsächliche Ausführung und ein schnellen, soliden backout Plan!

Andere Tipps

Ich mag diese Syntax. In Ihrer Probe fokussiert Sie auf Struktur zu verändern. Aber was ist die Datenmanipulation?

Es ist sehr oft, wenn in der Migration muss ich Daten ändern (zum Beispiel einige Verzeichnisdaten hinzufügen).

Ich möchte die Fähigkeit sehen, um sicherzustellen, dass jede Änderung auf eine Datenbank angewendet wurde. So sagt zum Beispiel der Version 3 die Tabelle ‚Medien‘ hinzugefügt. Seitdem Versionen 4 und 5 wurden in die Datenbank aufgenommen, aber irgendwo entlang der Linie ‚Johnny Q Expert‘ löschte den Tisch ‚Medien‘. Jetzt kommt der Version 6, die die ‚Media‘ Tabelle ändern muss (was nicht mehr existiert) - eine Funktion nützlich sein überprüfen könnte, die in den Versionen 1 bis 5 vorhanden sind, eine Kulmination aller Änderungen wird sichergestellt, in der Datenbank, so dass die nächste Version sein kann korrekt angewendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top