中間テーブル は、2つの表のあいだに入って、どの行とどの行が結びついているか を記録するためのテーブルです。
とくに 1つのユーザーが複数の権限を持てる、1つの権限が複数のユーザーに割り当てられる のような 多対多 の関係でよく使います。
まず押さえたいポイント
- 片方にも反対側にも複数ぶら下がる関係を表すときに使う
- 代表的な列は
user_idとrole_idのような2本の外部キー - 文字列や配列でIDを1列に押し込むより、検索や更新や制約を扱いやすい
- Laravel では
pivot tableと呼ばれることが多い
どんな場面で使うか
中間テーブルは、次のような場面で出てきます。
- ユーザーと権限
- 記事とタグ
- 注文と商品
- チームとメンバー
たとえば商品と注文の関係では、単に 商品が注文に含まれる だけでなく、数量 や 単価 も持たせたくなることがあります。
その場合、中間テーブルは単なる橋渡しではなく、関係そのものの情報 を持つ場所にもなります。
実務で見るポイント
中間テーブルで大事なのは、多対多ならとりあえず作る で終わらず、本当に多対多なのかを先に見極めることです。
実は片側が1つしか持てないなら、片方に外部キーを置く 1対多 で十分なこともあります。
また、中間テーブルでは (AのID, BのID) の組み合わせが重複しないように考えることが多いです。
重複行が増えると、一覧や集計が崩れやすくなります。
よくある誤解
中間テーブルは フレームワークが勝手に作る裏側の表 と見られがちですが、実際にはかなり重要な設計ポイントです。
ORM が吸収してくれても、遅い JOIN や重複結果、追加カラムの扱いを考えるときは、結局この表の意味を理解している方が強いです。
詳しくは 中間テーブルとは?多対多で必要になる理由とピボットテーブルとの違い で、なぜ必要になるのかを具体例つきで整理しています。