version: Rails 4.1
ActiveRecord::Schema.define(version:class="Apple-converted-space">?
20080906171750
)?
do
??
create_table?
"authors"
, force:?
true
?do
?|t|
????
t.string???
"name"
????
t.datetime?
"created_at"
????
t.datetime?
"updated_at"
??
end
?
??
create_table?
"products"
, force:?
true
?do
?|t|
????
t.string???
"name"
????
t.text?
"description"
????
t.datetime?
"created_at"
????
t.datetime?
"updated_at"
????
t.string?
"part_number"
??
end
end
在许多方面, 确实是这样的. ?这个文件的创建是用来检查数据库和描述它的数据结构, 使用 create_table, add_index之类的. 因为这是不依赖数据库, 它可以被载入到任何数据库, 只要Active Record 支持的数据库种类. 这是非常有用的, 如果你过去做过的应用, 它是能够运行在多种数据库上面的.
?
然而这里也有一种权衡让步. db/schema.rb 不能描述数据库的特有属性, 例如外键限制, 触发器, 或者是存储过程. 当在一个数据迁移文件(migration)中, 你可以生成定制的SQL语句, 数据库模式输出中不能够重新组成那些来自数据库的语句. ?如果你正在使用类似于这种特性, 那么你应该设置数据库模式的格式为 :sql.
?
等价于使用Active Record 的数据库模式输出的另外一个情况是, 数据库的结构将会被使用一个工具来输出(通过 db:structure:dump 的Rake task) 把数据库的详细描述都放到 db/structure.sql 文件里.例如, 对于 PostgreSQL, 使用的是 pg_dump 工具. 对于 MySQL, 这个文件将包含 SHOW CREATE TABLE 对于多个数据表的输出内容.
?
载入这些数据库模式是一个相对简单的问题, 用来生成他们所包含的SQL语句. 在定义上, 这是会创建一个完美的数据库结构拷贝. 然而使用:sql模式格式将会阻止载入数据库模式到一个 RDBMS(关系型数据库)中, 除了是用来创建它的数据库.
?
因为数据库模式输出是验证过的代码, 所以强烈建议你用代码控制来管理他们.
?
original url:?http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you?