【たたいたりれーしょん】

多対多リレーション とは?

💡 学生と講義、タグと記事——「どっちも複数OK」な関係は中間テーブルで繋ぐ
📌 このページのポイント
多対多リレーション(中間テーブル方式) students(学生) id name 1 田中 2 佐藤 enrollments(受講) student_id(FK) course_id(FK) 1 1 1 2 2 1 courses(講義) id name 1 数学 2 英語 解読例 田中さん → 数学、英語を受講 数学 → 田中さん、佐藤さんが受講 中間テーブルが双方向の「多」を実現する
多対多リレーションと中間テーブル
ひよこ ひよこ

多対多リレーションってどういう関係?

ペンギン先生 ペンギン先生

たとえば「学生」と「講義」の関係だよ。田中さんは数学と英語を受講、数学の講義には田中さんと佐藤さんが参加……どちらも複数の相手を持てるでしょ?

ひよこ ひよこ

テーブルではどうやって表現するの?

ペンギン先生 ペンギン先生

「学生」テーブルと「講義」テーブルの間に「受講」という中間テーブルを作るんだ。中間テーブルには student_id と course_id の2つの外部キーを持たせて、組み合わせで関係を表現するよ。

ひよこ ひよこ

中間テーブルって面倒じゃない?

ペンギン先生 ペンギン先生

最初はそう感じるけど、中間テーブルに「成績」や「受講日」といった追加情報を持たせられるのが実は便利なんだ。「田中さんの数学は90点」みたいなデータを入れられるよ。

ひよこ ひよこ

Webアプリでも多対多って使うの?

ペンギン先生 ペンギン先生

めちゃくちゃ使うよ!「記事とタグ」「ユーザーとフォロー」「商品とカテゴリ」……ブログのタグ機能なんかは典型的な多対多だね。

ひよこ ひよこ

気をつけるポイントってある?

ペンギン先生 ペンギン先生

中間テーブルの複合主キーをちゃんと設定することと、データ量が増えるとJOINが重くなりがちだからインデックス設計が重要だね。あとORMを使えば中間テーブルを意識せずに操作できるフレームワークも多いよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「多対多リレーション」って出てきたら「中間テーブルで両方向に複数つながる関係」と思えればだいたいOK!
📖 おまけ:英語の意味
「Many-to-Many Relationship」 = 多対多の関係
💬 双方が複数の相手を持てる関係で、直接は表現できないから中間テーブルという「仲人」が必要なんだよ
← 用語集にもどる