2
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.

アソシエーションの概念について

Posted at

アソシエーションとは

例えば、ブログを投稿したユーザー名を表示するには、ユーザーとブログモデルを関連付ける必要があります。
このような2つのモデル間の関連付けのことをアソシエーションといいます。
そして、この関連付けには外部キーが必要になってきます。

外部キー

外部キーとは、複数のテーブルを結びつける時に使用するカラムのことです。
関連付けのために、テーブルに関連付け用のカラムを追加します。
外部キーは関連付け先のテーブルでは主キーになります。

(例)ユーザー全員がuser_idという名札をつけることにより、ブログとの結びつきを表す、というのが外部キーのイメージです。
この時、一人のユーザーが複数のブログを所有するという関係性が成り立つので、ブログとユーザーは、一対多の関係性で紐づいていると言えます。
Blogテーブルにuser_idがあったら、user_idはusersにおいては主キー、blogテーブルでは外部キーと呼ばれます。

また、どちらが主で、どちらが従なのか?という視点は、アソシエーションを設計する際にとても重要な情報になります。

外部キーの設定方法

実際にアプリを作り、動きを見ていきます。
既にUserモデルが作成されていると想定します。さらにBlogモデルも作成しますが、BlogモデルとUserモデルの関連付けをするために、テーブルに関連付け用のカラム(外部キー)を追加することが必要です。
それでは、blogテーブルにuser_idカラムを追加していきます。

rails g model Blog title:string content:text user:references

のように、 user:referencesをつけて実行することで、Userモデルと関連付けするための外部キーを備えた、以下のようなマイグレーションファイルが出来上がります。

db/migrate/xxxxx_create_blogs.rb
class CreateBlogs < ActiveRecord::Migration[5.2]
  def change
    create_table :blogs do |t|
      t.string :title
      t.text :content
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

このように、

t.references :user, foreign_key: true

というコードが自動的に含まれています。foreign_key = 外部キー指定です。

外部キー制約とは

主キーと外部キーを使った制約のこと。
外部キー制約により、

  • 存在しない値の外部キーが登録できない
  • 親テーブルに外部キーが登録されている子テーブルのリソースが削除できない

というメリットがあります。

2
0
1

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
2
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?