FE EXAM

リレーションシップ(エンティティ間の関連)

エンティティ同士の関連を表したもの。

DIAGRAM
エンティティ
関連(リレーションシップ)
関連には1対1・1対多・多対多の3種類がある1対1社員11社員証1人に1枚1対多部署1社員A社員B社員C1部署に複数の社員多対多学生科目1人が複数科目・1科目を複数人が履修→ 中間エンティティ「履修」で解消
解説

📌
リレーションシップとは

エンティティを線でつないで関連を示す社員所属する部署

リレーションシップとは、エンティティ同士の関連を表したものです。エンティティ(=管理対象の実体)が「何を管理するか」だとすると、リレーションシップは「それらがどう結びついているか」を表します。

身近な例で考えると、会社の組織図に似ています。「社員」と「部署」という2つの対象があり、「社員は部署に所属する」という関係でつながっています。E-R図(=実体と関連を描く設計図)では、エンティティの長方形どうしをで結んでこの関連を表します。

関連には1対1・1対多・多対多の3種類があり、これを多重度(カーディナリティ)と呼びます。上の図解で3種類を一覧にしているので、それぞれの違いを見比べてみましょう。関連を正しく整理することが、後で表を設計するときの土台になります。

📌
種類(1対1/1対多/多対多)

リレーションシップは、お互いが何件と結びつくか(多重度)で次の3種類に分けられます。

種類意味具体例
1対1一方の1件に対し、もう一方も必ず1件社員 ─ 社員証(1人に1枚)
1対多一方の1件に対し、もう一方は複数件部署 ─ 社員(1部署に複数人)
多対多双方が複数件と結びつく学生 ─ 科目(複数人が複数科目を履修)

見分け方のコツは、両方向から数を数えてみることです。
部署 → 社員:1部署に社員は何人? → 複数(多)
社員 → 部署:1社員は何部署に所属? → 1つ
このように「1対多」だと判断できます。両方向とも「複数」になるなら多対多です。

📌
多対多の解消方法

間に「履修」を置き2つの1対多に分解学生履修科目1:多多:1

多対多の関連は、関係データベース(=表でデータを管理する方式)ではそのままでは表現できません。「1人の学生は複数の科目を、1つの科目は複数の学生が履修する」という関係を、2つの表だけではうまく記録できないからです。

そこで、間に中間(連関)エンティティを作って解消します。
「履修」エンティティを新設:誰がどの科目を取ったかの1件1件を記録
学生 1対多 履修:1人の学生は複数の履修を持つ
科目 1対多 履修:1つの科目は複数の履修を持つ
これで多対多が2つの1対多に分解され、表で扱えるようになります。

身近な例で考えると、大学の履修登録票に似ています。「学生」と「科目」の間に「誰がいつ何を履修したか」を1行ずつ書く台帳(履修)を挟むことで、双方の関係を1件単位で管理できるようになる、というイメージです。

📌
ER図の読み方

顧客1注文する注文顧客ID注文番号長方形=エンティティ 楕円=属性 線=リレーションシップ

リレーションシップはE-R図(=Entity-Relationship図・実体関連図)という設計図で表します。E-R図では3種類の図形を使います。
長方形:エンティティ(管理対象。例:顧客・注文)
楕円:属性(エンティティの性質。例:顧客IDや注文番号)
:リレーションシップ(関連。例:「注文する」)

なぜ線で結ぶのか。それは「どのデータとどのデータが結びついているか」を一目でわかるようにするためです。言葉で「顧客が注文を持つ」と書くより、図で線を引いた方が全体の構造を素早く把握できます。線の両端に書いた「1」「多」が多重度(カーディナリティ)を表します。

身近な例で考えると、電車の路線図に似ています。駅(エンティティ)どうしを線(リレーションシップ)でつなぐことで、どの駅がどこと繋がっているかを一目で示しています。E-R図も同じ考え方で、データの「つながり」を地図のように描き出します。

📌
主キーと外部キーの役割

顧客テーブル顧客ID(主キー)氏名住所注文テーブル注文ID(主キー)顧客ID(外部キー)商品名外部キーで参照

リレーションシップを実際の表(テーブル)で表現するとき、主キーと外部キーという2つの概念が登場します。
主キー(Primary Key):1件のデータを一意(ゆいいつ)に識別する列。例:「顧客ID: C001」
外部キー(Foreign Key):別のテーブルの主キーを参照するための列。例:注文テーブルの「顧客ID」

なぜ外部キーが必要なのか。「注文テーブル」に「どの顧客が注文したか」を記録したいとき、顧客テーブルの主キー(顧客ID)を外部キーとして注文テーブルに持たせることで、2つのテーブルが結びつきます。外部キーは「向こうのテーブルのあの行を参照していますよ」という目印です。

身近な例で考えると、図書館の貸出カードに似ています。貸出カードに「会員番号(外部キー)」を書くことで、「誰が借りたか」を会員台帳(顧客テーブル)と結びつけられます。カードを見るだけで「C001番の会員=山田太郎さん」とわかる、それが外部キーの役割です。

練習問題

🎯
基本情報技術者 練習問題

Q1.データベース設計におけるリレーションシップの説明として最も適切なものはどれか。
A.1件のデータを一意に識別する列
B.エンティティ同士の関連を表したもの
C.エンティティが持つ性質や項目
D.データを高速に検索するための索引
Q2.「1人の顧客は複数の注文をするが、1件の注文は1人の顧客のものである」関連のカーディナリティ(多重度)はどれか。
A.1対1
B.1対多
C.多対多
D.関連はない
Q3.「学生」と「科目」のような多対多の関連を関係データベースで扱うときの一般的な方法はどれか。
A.多対多のまま2つの表だけで実装する
B.間に「履修」のような中間(連関)エンティティを設け、2つの1対多に分解する
C.一方のエンティティを削除する
D.主キーを廃止する

関連コンテンツ