2009-02-19 104 views
3

我目前的宠物项目是独立于语言的数据库迁移库(Google Code上的Wizardby)。它非常受ActiveRecord Migrations的启发,但有一些细微之处。例如,做一些基本的“类型推断”,所以你不必指定FK列的类型。它也足够智能,只需“升级”序列即可生成“降级”脚本。尽管迁移是用特殊的DSL编写的,但该工具主要针对.NET项目。它也是数据库平台无关的。.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 

我知道其他迁移库在那里,但嘿,这是一个宠物项目!

现在的问题是:你对数据库迁移工具包有什么特点,你可以说这个特定的小狗语法明智吗?

回答

2

从外观来看,我不得不说它很容易遵循,整体结构看起来很干净。

我正在寻找像这样的最大功能如下。

  1. 能够使交易的变化来回滚应该有一个问题。 (数据完整性或以其他方式)
  2. 能够看到实际生成的SQL脚本,在需要时
  3. 自动回滚,如果发生在最后一个版本出现故障

我有一个关于钥匙的移动其他要求,索引等等,但看起来你已经处理了。对我而言,它确实专注于实际执行的控制,以及快速,稳固的退出计划!

6

我喜欢这种语法。在你的样本中,你专注于改变结构。但是数据操作呢?

在迁移过程中,我经常需要修改数据(例如添加一些字典数据)。

3

我想看看能否验证每个修订版已应用于数据库。所以说例如版本3添加了表格'媒体'。从那时起,版本4 & 5已被添加到数据库中,但沿着'Johnny Q Expert'这一行删除了'Media'表。现在版本6需要改变'媒体'表(不再存在) - 验证功能可能是有用的,这可以确保数据库中存在1到5版本所做的所有更改的高潮,因此下一个版本可以是正确应用。