.NET kit de herramientas de migración de base
-
05-09-2019 - |
Pregunta
Mi proyecto actual mascota es una biblioteca de migración de base independiente del lenguaje ( Wizardby en google Code). Es más o menos inspirado en ActiveRecord migraciones, pero tiene algunas sutilezas. Por ejemplo, hace un poco de "inferencia de tipos" básicos por lo que no tiene que especificar el tipo de una columna FK. También es lo suficientemente inteligente como para generar secuencias de comandos "degradar" dados solamente "actualizar" secuencia. A pesar de que las migraciones se escriben en un DSL especial, esta herramienta está dirigido principalmente a proyectos de .NET. Es también la base de datos-independiente de la plataforma.
He aquí un vistazo rápido de la sintaxis:
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
Soy consciente de otras bibliotecas de migración por ahí, pero bueno, es un proyecto de mascotas!
La pregunta es: ¿qué características Qué espera de kits de herramientas de migración de base de datos en general y lo que se puede decir de esta sintaxis en cuanto al cachorro en particular?
Solución
Desde el aspecto de que tengo que decir que es poco profunda fácil de seguir y en general la estructura se ve bastante limpio.
Las características más grandes que yo estoy buscando en algo como esto son los siguientes.
- Posibilidad de realizar cambios en una transacción para hacer retroceder deberían no ser un problema. (Integridad de los datos o de otra manera)
- Capacidad de ver los scripts SQL generados reales en caso de necesidad
- reversión automática, si se produce un fallo a la última versión
Tengo otros requisitos relacionados con el movimiento de las claves, índices, y el tipo, pero parece que haya que ya se maneja. Para mí está muy concentrado en los controles en torno a la ejecución real, y un plan de reversión rápida, sólida!
Otros consejos
Me gusta esta sintaxis. En la muestra que se centró en el cambio de estructura. Pero ¿qué pasa con la manipulación de datos?
Es muy a menudo cuando en la migración tengo que modificar los datos (por ejemplo, añadir algunos datos de diccionario).
Me gustaría ver la posibilidad de verificar que cada revisión se ha aplicado a una base de datos. Por lo que dicen, por ejemplo, la versión 3 añade el cuadro 'Medios'. Desde entonces las versiones 4 y 5 se han añadido a la base de datos pero en algún lugar a lo largo de la línea 'Johnny Q Experto' borrado la tabla 'Medios'. Ahora viene la versión 6, que necesita para alterar la tabla 'Medios' (que ya no existe) - una función de verificación podría ser útil que garantiza la culminación de todos los cambios realizados en las versiones 1 thru 5 de ellas presentes en la base de datos para la próxima versión puede ser se aplica correctamente.