我目前的宠物项目是一个独立于语言的数据库迁移库(Google Code上的Wizardby).它几乎受到ActiveRecord Migrations的启发,但有一些细节.例如,做一些基本的"类型推断",因此您不必指定FK列的类型.只有"升级"序列才能生成"降级"脚本.尽管迁移是使用特殊的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
我知道其他迁移库,但嘿,这是一个宠物项目!
问题是:您对数据库迁移工具包的期望是什么?您对这种特定的小狗语法有什么看法?
我喜欢这种语法.在您的示例中,您专注于改变结构.但是数据操作呢?
在迁移时我经常需要修改数据(例如添加一些字典数据).