0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

migrateでカラムに外部キーを追加する

Last updated at Posted at 2020-10-18

プログラミング初心者でも理解できる内容を書いていければと思います。

railsでmigrateする際に、カラムにモデルの関連づけのために外部キーを追加する方法を整理します。

前提としては、ユーザーと、そのユーザーの複数の投稿(tweet)を紐付けたい、ということです。

◉外部キーをテーブルに追加する

そのためには、新しく作成するtweetsテーブルに user_id というカラムを追加して、投稿を所有しているユーザーの id を格納するようにします。

このような場合では、referenceというデータ型を使用して外部キーのカラムを追加します。

tweetsテーブルを作成するマイグレーションファイルを、こんな感じに記述します。


class CreateTweets < ActiveRecord::Migration[5.2]
 def change
   create_table :tweets do |t|
     t.string     :text,                     null: false
     t.references :user, foreign_key: true,  null: false

     t.timestamps
   end
 end
end

t.references :user, foreign_key: true ここですね。

t.referencees :user で、user_idというカラムを作成してくれます。そしてindexを自動で付与してくれます。indexにより検索が楽になります。

ただし、データの読み込みや取得が早くなるメリットがあるかわりに、書き込みの速度が遅くなるというデメリットがあるみたいです。

これだけだと、外部キー制約はつかないので、

foreign_key: true をつけます。

また、既存のテーブルに外部キーを追加したい場合は次のようになります。


class AddColumn < ActiveRecord::Migration[5.0]
 def change
   add_reference :tweets, :user, foreign_key: true
 end
end

ちなみに、、、

null: false と記述することで、NOT NULL制約をつけることができます。データベースカラムの値にNULLを格納したくない場合に、つまり、あるモデルの属性の値が必ず入らなければいけないと期待するときに、このような制約をつけます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?