일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- 건담베이스
- java
- Spring
- rails7
- Flutter
- html
- 일본어
- nico
- 연습문제
- rails
- 비즈니스일본어
- メソッド
- ruby
- jsp
- 単語
- Web
- 반다이몰
- 一日一つメソッド
- C로 시작하는 컴퓨터 프로그래밍4판
- springboot
- vscode
- DART
- 日本語
- 인프런
- CSS
- javascript
- 건담
- 디지몬
- 자바
- Today
- Total
AR삽질러
Rails 一日一つメソッド (Day22) Associations- 中間テーブルとthroughオプション 본문
Rails 一日一つメソッド (Day22) Associations- 中間テーブルとthroughオプション
아랑팡팡 2024. 1. 15. 22:54
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モデルと紐づけられる。
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
Rails 一日一つメソッド (Day24) sessionメソッド (0) | 2024.01.31 |
---|---|
Rails 一日一つメソッド (Day23) flashメソッド (0) | 2024.01.31 |
Rails 一日一つメソッド (Day21) Associations-has_oneメソッド (0) | 2024.01.12 |
Rails 一日一つメソッド (Day20) Associations-has_manyメソッド (0) | 2024.01.11 |
Rails 一日一つメソッド (Day19) Associations-belongs_toメソッド (0) | 2024.01.10 |