中間テーブルとは
-
テーブルとテーブルの多対多の関係を表す関連テーブル
-
中間テーブルを使うことで多対多の関係を一対多の関係にできる
中間テーブルを使う理由
- 空のカラムができてしまいエラーの原因となるのを防ぐため
中間テーブル
例えば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 | 英語 |
・どちらかのテーブル情報が増えてもカラムを足す必要がない
・不要な空欄の発生が防げる
・中間テーブルで、それぞれのユーザーの受けている科目が表現できている