在一个多变的环境中,应用程序需要动态地做出调整,以解决新的需求和挑战。当应用程序开发人员更改他们的应用程序时,例如添加一个新的对象或类,就需要修改底层持久性,以确保数据库与应用程序同步。更改数据库模式的传统方法是生成新的 SQL 脚本。但是,通过 SQL 脚本难于按版本依次保存应用程序和数据库。而且,数据库开发人员很少构建 SQL 脚本来逆转数据库模式中做出的与应用程序更改相关联的更改。在大多数开发环境中,更改是通过删除所有数据库对象,并使用之前版本的 SQL(DDL)脚本重新创建它们来逆转的。
于很多 Web 开发人员来说,在 Rails 上的主要发现是其内置的对通过迁移来变更模式的支持。虽然数据库开发人员肯定更倾向于通过 DDL 或数据操作语言(DML)使用 SQL,但大多数应用程序开发人员更乐意坚持使用他们的工具:Ruby 语言和它的库。这正是 Rails 通过迁移提供的东西:一个简单而有效的基础设施,它利用 ActiveRecord 抽象按版本依次创建和修改数据库对象,例如表和列。通过 Rails 迁移完成模式变更这一主要的数据库管理任务。Rails 框架简化了开发,但是相关的工具(rake 任务)在驱动数据库更改和使应用程序代码与表结构同步方面也非常有效。