エンティティ同士の関連を表したもの。
リレーションシップとは、エンティティ同士の関連を表したものです。エンティティ(=管理対象の実体)が「何を管理するか」だとすると、リレーションシップは「それらがどう結びついているか」を表します。
身近な例で考えると、会社の組織図に似ています。「社員」と「部署」という2つの対象があり、「社員は部署に所属する」という関係でつながっています。E-R図(=実体と関連を描く設計図)では、エンティティの長方形どうしを線で結んでこの関連を表します。
関連には1対1・1対多・多対多の3種類があり、これを多重度(カーディナリティ)と呼びます。上の図解で3種類を一覧にしているので、それぞれの違いを見比べてみましょう。関連を正しく整理することが、後で表を設計するときの土台になります。
リレーションシップは、お互いが何件と結びつくか(多重度)で次の3種類に分けられます。
| 種類 | 意味 | 具体例 |
|---|---|---|
| 1対1 | 一方の1件に対し、もう一方も必ず1件 | 社員 ─ 社員証(1人に1枚) |
| 1対多 | 一方の1件に対し、もう一方は複数件 | 部署 ─ 社員(1部署に複数人) |
| 多対多 | 双方が複数件と結びつく | 学生 ─ 科目(複数人が複数科目を履修) |
見分け方のコツは、両方向から数を数えてみることです。
・部署 → 社員:1部署に社員は何人? → 複数(多)
・社員 → 部署:1社員は何部署に所属? → 1つ
このように「1対多」だと判断できます。両方向とも「複数」になるなら多対多です。
多対多の関連は、関係データベース(=表でデータを管理する方式)ではそのままでは表現できません。「1人の学生は複数の科目を、1つの科目は複数の学生が履修する」という関係を、2つの表だけではうまく記録できないからです。
そこで、間に中間(連関)エンティティを作って解消します。
・「履修」エンティティを新設:誰がどの科目を取ったかの1件1件を記録
・学生 1対多 履修:1人の学生は複数の履修を持つ
・科目 1対多 履修:1つの科目は複数の履修を持つ
これで多対多が2つの1対多に分解され、表で扱えるようになります。
身近な例で考えると、大学の履修登録票に似ています。「学生」と「科目」の間に「誰がいつ何を履修したか」を1行ずつ書く台帳(履修)を挟むことで、双方の関係を1件単位で管理できるようになる、というイメージです。
リレーションシップはE-R図(=Entity-Relationship図・実体関連図)という設計図で表します。E-R図では3種類の図形を使います。
・長方形:エンティティ(管理対象。例:顧客・注文)
・楕円:属性(エンティティの性質。例:顧客IDや注文番号)
・線:リレーションシップ(関連。例:「注文する」)
なぜ線で結ぶのか。それは「どのデータとどのデータが結びついているか」を一目でわかるようにするためです。言葉で「顧客が注文を持つ」と書くより、図で線を引いた方が全体の構造を素早く把握できます。線の両端に書いた「1」「多」が多重度(カーディナリティ)を表します。
身近な例で考えると、電車の路線図に似ています。駅(エンティティ)どうしを線(リレーションシップ)でつなぐことで、どの駅がどこと繋がっているかを一目で示しています。E-R図も同じ考え方で、データの「つながり」を地図のように描き出します。
リレーションシップを実際の表(テーブル)で表現するとき、主キーと外部キーという2つの概念が登場します。
・主キー(Primary Key):1件のデータを一意(ゆいいつ)に識別する列。例:「顧客ID: C001」
・外部キー(Foreign Key):別のテーブルの主キーを参照するための列。例:注文テーブルの「顧客ID」
なぜ外部キーが必要なのか。「注文テーブル」に「どの顧客が注文したか」を記録したいとき、顧客テーブルの主キー(顧客ID)を外部キーとして注文テーブルに持たせることで、2つのテーブルが結びつきます。外部キーは「向こうのテーブルのあの行を参照していますよ」という目印です。
身近な例で考えると、図書館の貸出カードに似ています。貸出カードに「会員番号(外部キー)」を書くことで、「誰が借りたか」を会員台帳(顧客テーブル)と結びつけられます。カードを見るだけで「C001番の会員=山田太郎さん」とわかる、それが外部キーの役割です。