我目前的宠物项目是一个与语言无关的数据库迁移库(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
我知道其他迁移库,但是,嘿,这是一个宠物项目!
问题是:您对数据库迁移工具包的期望是什么?您对这种特定的小狗语法有什么看法?
答案 0 :(得分:6)
我喜欢这种语法。在您的示例中,您专注于改变结构。但是数据操作呢?
在迁移时我经常需要修改数据(例如添加一些字典数据)。
答案 1 :(得分:3)
我希望能够验证每个修订版是否已应用于数据库。所以说例如版本3添加了表'Media'。从那以后版本4& 5已被添加到数据库中,但在“Johnny Q Expert”行的某处删除了“媒体”表。现在版本6需要更改“媒体”表(不再存在) - 验证功能可能很有用,可确保数据库中存在版本1到5中所做的所有更改的高潮,以便下一个版本可以正确应用。
答案 2 :(得分:2)
从它的外观来看,我不得不说这很容易理解,整体结构看起来很干净。
我正在寻找的最大功能如下:
我对移动键,索引等有其他要求,但看起来你已经处理好了。对我而言,它真正专注于实际执行的控制,以及快速,可靠的退出计划!