web-dev-qa-db-ja.com

移行の整数フィールドで:default => 0と:null => falseはどう違いますか?

移行を使用してデータベースを更新し、次のような整数フィールドを追加した場合:

t.integer :foo :default => 0, :null => false

データベース内の既存および新規レコードのデフォルト状態は何ですか?答えは次のとおりです。-両方ともfooを0として読み返します。

:null => falseがある場合、デフォルト=> 0が必要ですか?

2つの違いを理解しようとしています...

47
cmaughan

:null => falseは、NULL値を受け入れないようにデータベースに指示します。

:default => 0は2つのことを行います。

  1. クエリでNULLまたは何も指定されていない場合、デフォルト値として「0」を使用するようデータベースに指示します。
  2. 新しいオブジェクトを作成するときに、デフォルト値として「0」を使用するようにRailsに伝えます。

ポイント2では、新しいオブジェクトを保存するときに、有効な値が実際に設定されていることを確認します。

質問に答えるには:データベースにNULL値が必要ない場合は、:null => false、それ以外の場合は単に:defaultパラメータ。 「0」とNULLは同じものではありません。

NULL値を持たないことは、インデックス作成の目的で、またはサードパーティに直接データベースアクセスを提供する必要がある場合に重要です。

99
Ariejan