8

我有以下 Rails 迁移:

create_table :articles do |t|
  t.integer :user_id, :allow_null => false
  t.integer :genre_id, :allow_null => false
  t.string :url, :limit => 255, :allow_null => false
  t.string :title, :limit => 60, :allow_null => false
  t.text :summary, :limit => 350, :allow_null => false
  t.integer :votes_count, :default => 0
  t.datetime :published_at, :default => nil
  t.timestamps
end

首先在模型中验证所有“NOT NULL”的字段,所以我想知道我是否需要在迁移中使用allow_null?我不确定“NOT NULL”给数据库带来了什么好处(如果有的话)。

4

3 回答 3

11

如果您的意思是性能或存储效率,那就不多了。但是,将尽可能多的低级约束推送到数据库层只是一个好习惯。一方面,它保证 Rails 中的一个细微错误不会导致NULL非空字段中的一些随机数据。同样,如果您曾经针对同一个数据库运行另一个应用程序,那么将约束放在一个中心位置以进行维护并避免重复将非常有帮助。

于 2008-10-27T16:41:12.130 回答
3

NOT NULL 是计算机可以监视您并防止您出错的另一件事。

于 2008-10-27T17:06:54.963 回答
1

这似乎不会影响 mySQL,但您应该注意 2 个最近修复的迁移问题(一个当您未指定默认值时)

http://blog.codefront.net/2008/05/04/living-on-the-edge-of-rails-19-change_table-for-migrations-and-more/

http://antoniocangiano.com/2008/07/14/a-close-look-at-three-rails-21-bugs/

于 2008-10-27T17:37:29.817 回答