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

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

💡 先生1人にクラス30人——データベースの「1対多」は身近な関係そのもの
📌 このページのポイント
1対多リレーション authors(作者) id (PK) name 1 夏目漱石 1 books(本) id title author_id(FK) 1 吾輩は猫… 1 2 坊っちゃん 1 3 こころ 1 「多」側(books)に外部キー author_id を持たせて 「1」側(authors)のレコードを参照する
1対多リレーションのイメージ
ひよこ ひよこ

1対多リレーションって何のこと?

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

たとえば「作者」と「本」の関係を考えてみて。1人の作者が複数の本を書けるよね?これが1対多の関係だよ。作者テーブルの1件に対して、本テーブルに複数件が対応するんだ。

ひよこ ひよこ

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

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

「多」の側——つまり本テーブルに「author_id」という外部キーを持たせるんだ。本のレコードそれぞれが「この本の作者はID 5の人です」って参照する形だね。

ひよこ ひよこ

逆に本テーブルから作者を複数持つことはないの?

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

1対多では「1冊の本に作者は1人」という制約になるね。共著のように複数の作者が必要なら、それは多対多リレーションの出番だよ。

ひよこ ひよこ

1対多ってそんなによく使うの?

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

めちゃくちゃ使うよ!「顧客と注文」「カテゴリと商品」「ブログ記事とコメント」……ほとんどのアプリケーションは1対多の関係だらけなんだ。

ひよこ ひよこ

設計するとき気をつけることってある?

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

外部キーインデックスを貼ることかな。「この作者の本を全部取得」みたいなクエリが高速になる。あとN+1問題といって、ループで1件ずつ取得しちゃうとパフォーマンスが落ちるから、JOINやEager Loadingを使うのがコツだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「1対多リレーション」って出てきたら「親テーブル1件に子テーブルが複数ぶら下がる関係」と思えればだいたいOK!
📖 おまけ:英語の意味
「One-to-Many Relationship」 = 1対多の関係
💬 1つの親に多くの子がぶら下がる構造を表していて、データベース設計の基本中の基本だよ
← 用語集にもどる