【雑談】 20 データベースの「一対多」とは?やさしく、わかりやすく解説

応用情報技術者試験

はじめに

データベースを勉強していると、「一対多(いちたい た)」という言葉が出てきます。

これは、一つのものに、複数のものが結び付く関係を表す言葉です。

しかし、初めて学ぶ人とっては「何それ!?」ってなる概念だと思います。

そこで今回はこの「一対多(いちたい た)」をわかりやすく説明します。

具体例:お客さんと注文の関係から考えてみる

例えば、1人のお客さんが、別々の機会に何度も注文することがあります。この「顧客と注文」を例に、一対多を考えてみましょう。顧客とは、お客さんのことです。

田中さんが、次のように2回注文したとします。

  • 1回目の注文:本
  • 2回目の注文:ペン

田中さん1人に対して、注文が2件あります。

反対に、「本を買った1回目の注文」だけに注目すると、その注文をしたのは田中さん1人です。

つまり、両方から見ると次のようになります。

  • お客さん1人から見ると、その人の注文は複数件あり得る。
  • 注文1件から見ると、その注文をしたお客さんは1人だけ。

この関係が「顧客が一、注文が多」の一対多です。ここでは、一つの注文を複数人の共同名義にはしないものとします。

データベースとテーブル

データベースとは、情報を整理して保存し、必要なときに探したり取り出したりできる仕組みです。

今回の例では、「お客さんの情報」と「注文の情報」を、別々の表に整理します。

このような表を、データベースではテーブルと呼びます。

テーブル①:お客さんの表

顧客ID顧客名
A田中さん
B佐藤さん

IDとは、誰なのか、どの注文なのかを見分けるために付ける番号や記号です。この表では、Aが田中さん、Bが佐藤さんを表しています。

また、表の1行分の情報をレコードと呼びます。「A・田中さん」と書かれた1行が、一つのレコードです。

この表は、お客さん1人につき1行になっています。

テーブル②:注文の表

注文ID顧客ID注文した商品
001A本
002Aペン
003Bノート

こちらは、注文1件につき1行の表です。例えば、「001・A・本」という1行は、「注文001は、顧客Aによる本の注文」という意味です。

説明を簡単にするため、ここでは1回の注文で商品を一つだけ買う例にしています。

注文の表にある「顧客ID」を見れば、誰の注文なのかが分かります。Aは田中さんなので、注文001と注文002は、どちらも田中さんの注文です。

このように同じIDを手掛かりにすると、二つの表の情報を結び付けられます。

二つの表を、両方から見てみよう

ここでいう「対応する」とは、誰の注文なのか、という関係で結び付くことです。

まず、お客さんの表にある「田中さんの1行」から見てみます。

注文の表には、田中さんのIDであるAが2行あります。つまり、お客さんの表の1行に、注文の表の2行が対応しています。

次に、注文の表にある「注文001の1行」から見てみます。

この行の顧客IDはAです。お客さんの表でAに当たるのは、田中さんの1行だけです。

専門用語を使って表すと、次のようになります。

  • 顧客テーブルの1レコード(お客さん1人分の行)に、注文テーブルの複数のレコード(その人の注文の行)が対応できる。
  • 注文テーブルの1レコード(注文1件分の行)に対応する顧客は、1レコード(お客さん1人分の行)だけ。

最初に説明した「お客さん1人と、その人の複数の注文」を、表の行同士の関係で表しているのです。

注文が1件だけでも、一対多なの?

佐藤さんの注文は、今のところノートの1件だけです。それでも、顧客と注文の関係は一対多です。

「多」は、必ず複数件あるという意味ではなく、複数件に増えることができるという意味だからです。

佐藤さんがもう一度注文すれば、佐藤さんに結び付く注文は2件になります。まだ注文していないお客さんも登録する仕組みなら、注文が0件のお客さんもいます。

今ある注文の件数だけでなく、「1人のお客さんが、何度も注文できるか」を考えるのがポイントです。

まとめ

一対多は、顧客と注文で考えると次の関係です。

  • 1人のお客さんは、複数の注文を行える。
  • 1件の注文をしたお客さんは、1人だけ。

データベースでは、表を「テーブル」、表の1行を「レコード」と呼びます。そのため、この関係を「顧客の1レコードに、複数の注文レコードが対応する」と説明します。

片方の1件に、相手は何件結び付くのか。それを、反対側からも考える。 この見方で、一対多の関係を確認できます。

コメント

タイトルとURLをコピーしました