Ridgepole
Active Record ほぼ準拠のマイグレーションツールです。
「id」カラムの除去
Ridgepole でごく普通にマイグレーションをすると、「id」というインクリメンタルな主キーのカラムが生成されます。新たにデータベースを生成する際には問題ないとは思うのですが、既存のデータベースのマイグレーションをする場合には不要なことも少なくありません。
「id」カラムを除去するには、create_table
のオプションにid: false
を付与すればよいです。具体的には以下のとおりです。
create_table "テーブル名", force: :cascade, id: false,... do |t|...
新しい主キーの設定
「id」カラムを除去しただけですと主キーが見失われますので、主キーを設定してやります。主キーの設定をするためには3つの記述を行う必要があります。
1つ目の記述
create_table
にてprimary_key: [主キーにするカラム名を配列で書く]
というオプションを付与します。具体的には以下のとおりです。複合主キーにも対応しています。
create_table "テーブル名", force: :cascade, id: false, primary_key: [:column_1, :column_2]... do |t|...
2つ目の記述
主キーにするカラム(群)にNOT NULL
制約を付けます。具体的には以下のとおりです。
(省略) t.integer "column_1", null: false t.integer "column_2", null: false (省略)
3つめの記述
主キーにするカラム(群)にUNIQUE
制約を付与します。具体的には以下のとおりです。
add_index :テーブル名, [:column_1, :column_2], unique: true
主キーの設定が完了
上記のようにスキーマファイルを書いてマイグレーションを実行すれば、主キーを任意のカラムに設定できると思います。