データベース

【1対多?】今更聴けないデータベースのリレーション – 例をみながら謎を紐解いていこう –

みなさん、こんにちは。どんぶラッコです。

データベースの概念を学ぶときに一番最初につまづくのが、「1対1」「1対多」「多対多」という言葉達ですよね。

でもこれらの概念はちゃんと例を用いながら理解すれば全然難しくありません!!

ということで、今回は「1対1」「1対多」「多対多」の3つの概念を例えを用いながら説明していきます!

1対1

では早速、学生というテーブルと連絡先というテーブルを考えてみましょう。

※今回は、学生全員がそれぞれバラバラな場所に住んでいると仮定します。

どんぶラッコ
どんぶラッコ
具体的な値を入れてみるとこんな感じだね!

 

 

さて、では●●から見た●●という形式で関係性を紐解きましょう。

学生テーブルから見た連絡先テーブル

  • サンプル太郎さんの住所は、****
  • サンプル次郎さんの住所は、****

というように、1人の学生を指名すると、1つの住所が確定しますね。

連絡先テーブルから見た学生テーブル

では、連絡先(≒住所)を見たら、学生は確定するでしょうか。

…確定できますね。「学生全員がバラバラな住所に住んでいる」という過程がありますから、住所がわかれば必然的に1人の学生を特定することができます。

このように、1つのIDに対してお互いに1つの値がバチっと決まる関係性を1対1と呼ぶのです。

名無しさん
名無しさん
下図みたいに、テーブルを分割しなくてもいけちゃうやつって考えると頭の整理がしやすいかも!

1対多

次に、学生とクラスの関係を考えてみましょう。

この学校は1組, 2組, 3組 … ではなく、 甲, 乙, 丙, 丁 … とクラス名を決めているようですね

どんぶラッコ
どんぶラッコ
(だから数字じゃなくて別テーブルにする必要がある…という無理やりな設定)

では、お互いの関係性を見ていきましょう。

学生テーブルから見たクラステーブル

  • サンプル太郎さんのクラスは、甲クラス
  • サンプル次郎さんの住所は、甲クラス

というように、こちらも1人の学生を指名すると、所属するクラスが1つに確定しますね。

クラステーブルから見た学生テーブル

では逆に、クラス名がわかれば個人の学生が特定できるでしょうか?

….できませんね。

  • 甲クラス …. サンプル太郎、サンプル次郎
  • 乙クラス …. サンプル隼人
  • 丙クラス … サンプル花子、サンプル郁恵

のように、クラス名から学生を絞り込もうとすると複数人引っかかってしまいます。

このように、1つの関係性ではない状態を “多”と表現します。

すなわち、今回は学生からはクラスが一意に決まるが、クラスからは学生との関係が複数存在します。

こんな関係性を “1対多” と表現しています。

多対多

今度は、学生と部活動の関係を考えてみましょう。

この学校では兼部が認められているようです。サンプル次郎くんは野球部とサッカー部を兼部しているようですね

名無しさん
名無しさん
次郎くん絶対授業中ずっと寝てる

勘のいい皆様はもうお分かりだと思いますが、それぞれの立場からの関係性を見ていきましょう。

学生テーブルから見た部活テーブル

  • サンプル太郎さんの部活は、野球部
  • サンプル次郎さんの部活は、野球部 & サッカー部

のように、1学生1つの部活、とは限らないです。

つまり “多” であると言えます。

部活テーブルから見た学生テーブル

部活テーブルから見た学生テーブルは?

もうお分かりですね。

「野球部」で絞ったとしても、野球部に所属する学生は複数人います。

したがって、「多」の関係です。

このように、お互いに複数個の関係を持つテーブルを「多対多」と呼ぶのです。


以上、テーブルの関係性を整理してみました!

みなさんも頭がこんがらがったら、●●から見た●●で整理をしましょう!

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
RELATED POST

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です