migrationファイルの調整、テーブル作成

Model で作成された各テーブル用migrationファイルに NOT NULL制約や index を追加します。
制約やindexの付け方にはいろいろな流儀があると思いますが、今回は以下のような考え方で付けます。

  • NOT NULL制約は外部キーのようにそこがnullになってしまうと明らかにデータ構造がおかしくなってしまうカラム
  • また、テーブルの核になるデータでそのカラムがnullのデータというのはありえないカラム
  • index は外部キー等でjoint等で絶対用いられるカラム

どのようなルールにするかは、作成するDBの性格や文化があるので、これが正解だというのはありません。ただし、一つのプロジェクトの中では統一された考え方や一貫性があることは重要だと思います。


例:

class CreateRequests < ActiveRecord::Migration
  def self.up
    create_table :requests do |t|
      t.column :article_id, :integer, :null => false
      t.column :user_id, :integer, :null => false
      t.column :coment, :text
      t.column :created_at, :datetime
    end
    add_index :requests, :article_id
    add_index :requests, :user_id
  end

  def self.down
    drop_table :requests
  end
end

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :nickname, :string
      t.column :blog, :string
      t.column :cookie_id, :string, :null => false
      t.column :created_at, :datetime
    end
    add_index :users, :cookie_id, :unique => true
  end

  def self.down
    drop_table :users
  end
end


migrationファイルを修正したら、 rake db:migrate でテーブルを作成します。