boîte à outils de migration de base de données .NET
-
05-09-2019 - |
Question
Mon projet animal actuel est une bibliothèque de migration de base de données indépendante de la langue ( Wizardby sur Google code). Il est à peu près inspiré par ActiveRecord migrations, mais a quelques raffinements. Par exemple, le fait une « inférence de type » de base de sorte que vous ne devez pas spécifier le type d'une colonne FK. Il est également assez intelligent pour générer des séquences « downgrade » scripts donnés uniquement « mise à niveau ». Bien que les migrations sont écrites dans un DSL spécial, cet outil est principalement destiné aux projets .NET. Il est également la base de données-plate-forme indépendante.
Voici un aperçu rapide de la syntaxe:
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
Je suis au courant des autres bibliothèques de migration là-bas, mais bon, c'est un projet animal de compagnie!
La question est: quelles sont les caractéristiques que vous attendez de boîtes à outils de migration de base de données en général et que pouvez-vous dire au sujet de cette syntaxe sage chiot particulier?
La solution
De l'apparence de celui-ci, je dois dire qu'il est farily facile à suivre et dans l'ensemble de la structure semble assez propre.
Les plus grandes caractéristiques que je suis à la recherche quelque chose comme ce sont les suivantes.
- Possibilité de faire des changements dans une transaction pour faire reculer le devrait y avoir un problème. (Intégrité des données ou autre)
- Possibilité de voir les scripts SQL générés réels en cas de besoin
- rollback automatique, si une défaillance se produit à la dernière version
J'ai d'autres exigences en ce qui concerne le déplacement des clés, des index, et tel, mais il semble que vous avez déjà traité. Pour moi, il est vraiment concentré sur les contrôles autour de l'exécution proprement dite, et un plan de backout rapide, solide!
Autres conseils
J'aime cette syntaxe. Dans votre exemple, vous concentré sur la structure en pleine évolution. Mais qu'en est-manipulation de données?
Il est très souvent quand la migration je dois modifier les données (par exemple ajouter des données du dictionnaire).
Je voudrais voir la capacité de vérifier que chaque révision a été appliquée à une base de données. Donc, disons par exemple la version 3 ajoute la table « médias ». Depuis lors, les versions 4 et 5 ont été ajoutés à la base de données, mais quelque part le long de la ligne de Johnny Q Expert 'supprimé la table « médias ». Voici maintenant la version 6 qui doit modifier la table « médias » (qui n'existe plus) - une fonction vérification pourrait être utile qui assure l'aboutissement de toutes les modifications apportées dans les versions 1 à 5 sont présentes dans la base de données pour la prochaine version peut être appliquée correctement.