.NET Datenbank-Migration-Toolkit
-
05-09-2019 - |
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?
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.
- Die Fähigkeit, Änderungen in einer Transaktion ein Thema Rollback sollte es sein. (Datenintegrität oder anderweitig)
- Möglichkeit, die tatsächlichen generierten SQL-Skripts zu sehen, sollte die Notwendigkeit entstehen
- 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.