yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY82>中間テーブルについて

\ Follow me!! /

f:id:yujiro0320:20190512223713p:plain

学習状況

●学習日数 82日 

●学習時間(本日) 3時間

●累計学習時間 286.0時間

●一日あたりの平均学習時間 3.48時間 

はじめに

1対多のテーブル構造であれば作る事ができるが、
多対多の関係性の構築が必要な場合だと、少し詰まったので、忘備録の為にまとめる。

中間テーブルとは

テーブル間の関係性が多対多となりうる場合に、
テーブルとテーブルを繋ぐ為のあえて作成するテーブルである。多対多の復習をしていく。

以下多対多の関係

f:id:yujiro0320:20190512225450p:plain


lessonsクラスで授業の要素を管理。
studentsテーブルで生徒名を管理。

太郎が英語と、数学を受講しているデータを管理。 
studentsから見てhas_manyの関係である。
国語の授業は、一郎と三郎よって受講されているデーターを管理したい。
lessonsから見てhas_manyの関係である。

この場合中間テーブルがないとカラムが増え、構造的NGなテーブルができてしまうので、中間テーブルを作成する事でシンプルで無駄のない管理ができる。

f:id:yujiro0320:20190512231328p:plain

railsに置き換えた場合

モデルにはこのように記載。

class Lesson < ActiveRecord::Base
  has_many :lesson_student
  has_many :student, through: :lesson_student
end

class Student < ActiveRecord::Base
  has_many :lesson_student
  has_many :lesson, through: :lesson_student
end


# 中間テーブル
class LessonStudent < ActiveRecord::Base
  belongs_to :lesson
  belongs_to :student
end

他にも、定義方法はあるがとりあえずはこれで覚えておく。
railsguides.jp

ここに細かく書いているので、時間を見ながら解読しておく。

最後に

書いてみると、そこまで難しい概念ではないと改めて感じた。
但し、リレーションなど、実際にアプリ制作しながらでないと
使うタイミングをイメージできないメソッドもある。
勉強しまくるぞ!