8

次のレール移行があります。

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

パフォーマンスやストレージ効率の観点から言えば、それほど多くはありません。ただし、低レベルの制約をできるだけ多くデータベース レイヤーにプッシュすることをお勧めします。NULL1 つには、Rails の微妙なバグによって、null 以外のフィールドにランダムなデータが発生しないことが保証されます。同様に、同じデータベースに対して別のアプリを実行する場合、メンテナンスのために中央の場所に制約を配置し、重複を避けることは非常に役立ちます。

于 2008-10-27T16:41:12.130 に答える
3

NOT NULLは、コンピューターがあなたを監視し、間違いを犯さないようにするもう1つのことです。

于 2008-10-27T17:06:54.963 に答える
1

これは mySQL には影響しないようですが、最近修正された 2 つの移行の問題 (デフォルトを指定しない場合の 1 つ) に注意する必要があります。

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 に答える