AR삽질러

Rails 一日一つメソッド (Day22) Associations- 中間テーブルとthroughオプション 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day22) Associations- 中間テーブルとthroughオプション

아랑팡팡 2024. 1. 15. 22:54
728x90

 

Rails 一日一つメソッド (Day22) Associations-中間テーブルとthroughオプション

 

Associations-中間テーブル( middle or join table )とthroughオプション

 

 1) 多対多の関係 ( many-to-many )

 一人の教師は複数の科目を教えることもできるし、一つの科目に複数の教師が教えることもできる。このような関係を表現するためには中間テーブルが必要になる。

 

多対多の関係構文 - teacherテーブルとcoursesテーブル - 中間テーブルの teacher_coursesは teacher_idと course_idを外来キーとして持つ。Active Record - 中間テーブルは has_many :throughまたは has_and_belongs_to_many連関関係を使って二つのモテるを紐付ける。

 


2) 中間テーブルが必要な理由

 - 中間テーブルが必要な理由としては、多対多の関係を効率的に管理するため。 - 多対多の関係は一つのレコードが他のレコードの複数のレコードと紐付くことができるし、その逆の場合もできるような状態をいう。 - このような複雑な関係をDabaBaseで表現し、管理するためには中間テーブルが必要になる。

 

 2-1) カラムの数が多くなる。 - テーブルに多数のカラムが定義された時に発生し、カラムの数が多くなるとテーブルの複雑性が増すにつれて、データ管理とクエリの性能が低下する可能性がある。

 

 2-2) 未使用(NULL)のカラムが多くなる。 - NULL値が多くなると必要ではないことを意味する。

 

 2-3) NULLが沢山入ってしまうアンチパターンという良くない設計になる。

 - テーブルにNULL値が多いということは、テーブル設計が特定の事例に適合していないか、データモデリングが適切でないことを意味する。

 


3) 多対多の関係構文と例題

 - 多対多の関係を使う時は、モデルクラスに has_manyメソッドの through: オプションを使う。through: は、「経由する」意味で中間テーブルを経由して関連先のオブジェクトを取得できる。

 

:throughオプション

 - has_many :through連関関係は中間テーブルを通して二つのモデルの間に多対多関係を設定する。

class モデル名 < ActiveRecord::Base
	has_many :関連名, through: :中間テーブル名
    has_many :中間テーブル名
end

 

class Teacher < ApplicationRecord
	has_many :teacher_courses
    has_many :courses, through: :teacher_courses
end

class Course < ApplicationRecord
	has_many :teacher_courses
    has_many :teachers, through: :teacher_courses
end

 TeacherCourseは中間テーブルで、teacher_idと course_idを外来キーとして持っている。 Teacherモデルは has_many :professor_courseと has_many :courses, through :professor_coursesを通して Courseモデルと紐づけられる。

 

 

728x90
반응형
LIST