中間テーブルとは
-
テーブルとテーブルの多対多の関係を表す関連テーブル
-
中間テーブルを使うことで多対多の関係を一対多の関係にできる
中間テーブルを使う理由
- 空のカラムができてしまいエラーの原因となるのを防ぐため
中間テーブル
例えばusersテーブルとcoursesというテーブルがあったとする
id | user |
---|---|
1 | a |
2 | b |
3 | c |
4 | d |
id | course |
---|---|
1 | 国語 |
2 | 数学 |
3 | 理科 |
4 | 社会 |
5 | 英語 |
中間テーブルを使わない場合以下の様になってしまい、冗長になってしまう。
空のカラムもできてしまいエラーの原因となる。
usersテーブル
id | user | course_id1 | course_id2 | course_id3 | course_id4 | course_id5 |
---|---|---|---|---|---|---|
1 | a | 国語 | 数学 | 理科 | 社会 | 英語 |
2 | b | 国語 | 理科 | 社会 | ||
3 | c | 国語 | 数学 | 理科 | 社会 | |
4 | d | 英語 |
coursesテーブル
id | course | user_id1 | user_id2 | user_id3 | user_id4 |
---|---|---|---|---|---|
1 | 国語 | a | b | c | |
2 | 数学 | a | c | ||
3 | 理科 | a | b | c | |
4 | 社会 | a | b | c | |
5 | 英語 | a | d |
これを防ぐために中間テーブルを準備する
中間テーブル
id | user_id1 | course_id |
---|---|---|
1 | a | 国語 |
2 | a | 数学 |
3 | a | 理科 |
4 | a | 社会 |
5 | a | 英語 |
6 | b | 国語 |
7 | b | 理科 |
8 | b | 社会 |
~ | ~ | ~ |
12 | d | 英語 |
・どちらかのテーブル情報が増えてもカラムを足す必要がない
・不要な空欄の発生が防げる
・中間テーブルで、それぞれのユーザーの受けている科目が表現できている