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

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つの親に多くの子がぶら下がる構造を表していて、データベース設計の基本中の基本だよ
← 用語集にもどる