はじめに
データベースを勉強していると、「一対多(いちたい た)」という言葉が出てきます。
これは、一つのものに、複数のものが結び付く関係を表す言葉です。
しかし、初めて学ぶ人とっては「何それ!?」ってなる概念だと思います。
そこで今回はこの「一対多(いちたい た)」をわかりやすく説明します。
具体例:お客さんと注文の関係から考えてみる
例えば、1人のお客さんが、別々の機会に何度も注文することがあります。この「顧客と注文」を例に、一対多を考えてみましょう。顧客とは、お客さんのことです。
田中さんが、次のように2回注文したとします。
- 1回目の注文:本
- 2回目の注文:ペン
田中さん1人に対して、注文が2件あります。
反対に、「本を買った1回目の注文」だけに注目すると、その注文をしたのは田中さん1人です。
つまり、両方から見ると次のようになります。
- お客さん1人から見ると、その人の注文は複数件あり得る。
- 注文1件から見ると、その注文をしたお客さんは1人だけ。
この関係が「顧客が一、注文が多」の一対多です。ここでは、一つの注文を複数人の共同名義にはしないものとします。
データベースとテーブル
データベースとは、情報を整理して保存し、必要なときに探したり取り出したりできる仕組みです。
今回の例では、「お客さんの情報」と「注文の情報」を、別々の表に整理します。
このような表を、データベースではテーブルと呼びます。
テーブル①:お客さんの表
| 顧客ID | 顧客名 |
|---|---|
| A | 田中さん |
| B | 佐藤さん |
IDとは、誰なのか、どの注文なのかを見分けるために付ける番号や記号です。この表では、Aが田中さん、Bが佐藤さんを表しています。
また、表の1行分の情報をレコードと呼びます。「A・田中さん」と書かれた1行が、一つのレコードです。
この表は、お客さん1人につき1行になっています。
テーブル②:注文の表
| 注文ID | 顧客ID | 注文した商品 |
|---|---|---|
| 001 | A | 本 |
| 002 | A | ペン |
| 003 | B | ノート |
こちらは、注文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件に、相手は何件結び付くのか。それを、反対側からも考える。 この見方で、一対多の関係を確認できます。

コメント