Мой текущий проект для домашних животных - это библиотека миграции базы данных, не зависящая от языка ( Wizardby в Google Code). Это в значительной степени вдохновлено ActiveRecord Migrations, но имеет несколько тонкостей. Например, выполняет какой-то базовый «вывод типа», поэтому вам не нужно указывать тип столбца FK. Он также достаточно умен, чтобы генерировать сценарии «downgrade», используя только последовательность «upgrade». Хотя миграции написаны на специальном 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
Я знаю о других миграционных библиотеках, но эй, это любимый проект!
Вопрос в том, какие функции вы ожидаете от инструментальных средств миграции баз данных в целом, и что вы можете сказать об этом конкретном щенке по синтаксису?