1

我在我的应用程序中使用 mysql 作为数据库,如果我想向它添加一个新表,我可以使用 migrate,比如 rails generate migration name:string age:integer

或者只是在mysql中创建一个新表。他们两个有什么区别吗?

4

2 回答 2

4

是的,有很大的不同。除非您有充分的理由(例如它不会直接影响您的 rails 应用程序),否则您不应该直接在数据库中创建表。

如果您在 mySQL 中创建一个表,那么您将能够在创建匹配模型的情况下访问它,但是,当您部署数据库时,您还需要对生产数据库进行相同的更改。这意味着有一个额外的部署步骤很容易被遗忘。如果您有不止一个人在从事该项目,或者您在不止一台机器上使用它,这也适用。

直接创建表的另一个问题是您的数据库没有版本控制。如果您使用迁移,那么您可以随意在数据库版本之间切换。迁移中的某些内容是否破坏了您的应用程序?使用简单回滚到以前的版本rake db:rollback

第三个含义是您的db/schema.rb文件不会反映数据库。这将防止您在以后放弃您的计划。如果你想从 mySQL 切换到 Postgres,你会发现不使用迁移非常困难。

于 2012-07-19T20:21:15.390 回答
0

通过迁移创建表时,schema.rb文件会更新以反映新表的添加。

迁移是首选途径,因为您可以简单地运行 rake 任务rake db:migrate并在开发、测试和生产环境中创建所有表,而不是移植数据库。

您可以在此处的官方文档中阅读有关迁移的更多信息 - http://guides.rubyonrails.org/migrations.html

于 2012-07-19T20:22:02.243 回答