基礎ER図

弱エンティティと識別関係

定義

弱エンティティ (weak entity) とは、自身の属性だけでは行を一意に識別できず、親エンティティの主キーを借りて初めて一意になるエンティティであり、親との関連は識別関係 (identifying relationship)、対義の独立エンティティ同士を繋ぐ関連は非識別関係と呼ばれる。

まず身近な例で: 「注文書の 3 行目」だけを見せられたら?

紙の注文書を思い浮かべる。1 冊の注文書には表紙 (注文番号・注文日・顧客) があって、 本文に商品明細が何行か書かれている。ここで 「明細の 3 行目」だけを紙から切り取って渡すと、受け取った人は「これはどの注文の 3 行目ですか?」と聞き返したくなる。

「明細の 3 行目」は、注文書というコンテキストがないと存在意味を持たない。 こういう性質のエンティティを 弱エンティティ (weak entity) と呼ぶ。 親エンティティ (注文書) のキー (注文番号) を借りて初めて一意になる。

ER 図での見分け方 — 主キーの構造がすべて

弱エンティティかどうかは、視覚記号ではなく 主キーの構造 で決まる。 子側の主キーが親側の主キーを含んでいれば弱、独立の主キーだけで完結していれば強。

「注文明細」なら、主キーは (注文ID, 明細番号)。 明細番号だけでは「どの注文の 3 行目か」分からないので、 必ず親の 注文ID を含めて初めて世界の中で 1 行に絞れる。 この 「親のキーを借りないと一意にならない」 という性質そのものが、 弱エンティティの正体。親との関連は 識別関係 (identifying relationship) と呼ばれる (詳細は下の「対比 — 非識別関係の場合」節)。

だから弱エンティティは 名前で判断できない。 「配送先」「部屋」「注文明細」「扶養家族」— どれも一見独立のモノに見えるが、 意味的に親なしでは成立しないなら弱として扱い、主キーに親のキーを組み込む。 逆に、独立の意味を持つエンティティに親のキーを無理に押し込むのは過剰な結合で、設計としては筋が悪い。

弱と見抜くと、実装上の判断もいくつか自動的に決まる:

  • 削除の連鎖: 親を消したら子も消す (FK に ON DELETE CASCADE) が原則
  • 重複制御: 「同じ注文に同じ明細番号は 2 つない」が主キーで自動的に担保される
  • 単独 SELECT の意味の薄さ: 明細だけを取り出しても業務的にはほぼ役立たず、常に親と JOIN される

(記法補足: Chen 記法 では弱エンティティを二重四角、識別関係を二重菱形で描く慣習があり、 IPA データベーススペシャリスト試験や大学の教科書ではこの表記に出会うことがある。 本サイトを含めモダンな作図ツールの既定である IE 記法 では特別な視覚記号を使わず、 上に書いた通り主キーの構造で判別する。以下の図もこの流儀で描く。)

注文と注文明細 — 典型的な弱エンティティ
注文注文ID (PK)注文日顧客ID注文明細注文ID (PK)明細番号 (PK)商品名数量

「注文明細」は主キーが (注文ID, 明細番号) の複合キーで、親の注文ID を含むため弱エンティティ。IE 記法では見た目上は普通の箱で描き、主キー構造で判定する。

弱エンティティ判定のチェックリスト

  • 単独で識別できないか: 「明細番号 3」だけでは、どの注文の 3 行目か分からない
  • 親を消したら意味を失うか: 注文が消えたら明細は存在意義がゼロ
  • 親のライフサイクルに従属するか: 明細は注文と一緒に作られ、一緒に消える

3 つとも Yes なら弱エンティティ。1 つでも No があるなら、独立の強エンティティにする方が自然。

典型的な例

  • 注文 — 注文明細 (主キー: 注文ID + 明細番号)
  • 建物 — 部屋 (主キー: 建物ID + 部屋番号。「101号室」は建物なしには意味不明)
  • 従業員 — 扶養家族 (主キー: 従業員ID + 家族番号)
  • 会計期 — 期別集計 (主キー: 期ID + 集計項目)

対比 — 非識別関係の場合

弱エンティティを別名で呼ぶこともある。親との関連を 関連の側 から見たとき、 「親のキーが子の主キーの一部として継承される関連」を 識別関係 (identifying relationship) と呼び、 その対義の「親のキーは子の外部キーとしてだけ現れる (子の主キーには含まれない) 関連」を 非識別関係 (non-identifying relationship) と呼ぶ。 つまり 「弱エンティティ = 識別関係の子」「強エンティティ = 非識別関係の子」 と読み替えても意味は変わらない。

非識別関係の代表例が「顧客 — 注文」。顧客は 1 回だけ登録され、注文はその後何回も発生する。 注文の主キーは注文ID 単独で十分 (顧客なしでも注文行を一意に指せる)、顧客ID は FK として属性欄に持つだけ。 注文は顧客と一緒に消える存在ではなく、顧客が消えても履歴として残せる (実装上は SET NULL や履歴保持ルールで別途担保する)。

非識別関係 — 顧客と注文
顧客顧客ID (PK)氏名注文注文ID (PK)顧客ID注文日

注文の主キーは 注文ID 単独。顧客ID は FK として属性欄にあるだけで、主キーに含まれていない。これが非識別関係 (= 注文は強エンティティ) の姿。IE 記法では線の見た目に差はない — 主キー欄の構造だけが違いを示す。

IE 記法では識別 / 非識別の線の見た目は同じ。判別は必ず子の主キー欄で行う。 IDEF1X 記法では 実線 (識別) と 破線 (非識別) で描き分ける慣習がある。 詳細は 記法比較ページ

練習問題: 弱か強か

3 つの ER 図を用意した。それぞれ子側のエンティティが 弱エンティティ 強エンティティ か、主キーの構造を見て判定してほしい。 本サイトは IE 記法なので視覚記号のヒントはない — 主キー欄が親のキーを含んでいるかどうかがすべて。

問 1: 建物 と 部屋

オフィスビルの部屋管理システム。部屋番号は各建物の中で 101, 102, 201... と付番される (別の建物にも「101 号室」が存在する)。

建物 — 部屋
建物建物ID (PK)名称部屋建物ID (PK)部屋番号 (PK)用途

部屋」は弱エンティティ? 強エンティティ?

問 2: 会社 と 従業員

従業員データベース。従業員には社会保険番号ベースの独立 ID (E001, E002...) が付与されており、転職・部署移動をしても同じ ID で追跡される。

会社 — 従業員
会社会社ID (PK)会社名従業員従業員ID (PK)氏名会社ID

従業員」は弱エンティティ? 強エンティティ?

問 3: イベント と 参加登録

イベント運営システム。「誰がどのイベントに参加登録したか」を記録する。同じ顧客が同じイベントに 2 回登録することはない。

イベント — 参加登録
イベントイベントID (PK)開催日参加登録イベントID (PK)顧客ID (PK)登録日

参加登録」は弱エンティティ? 強エンティティ?

変なER図 との対応: 違和感 #7「配送先」が独立主キーで単独存在

架空 EC サイト運営システム ER 図
発注確定購入階層所属明細P対象配送先配送先ID (PK)郵便番号住所7カテゴリカテゴリID (PK)名称サブカテゴリID商品商品ID (PK)商品名価格カテゴリID顧客顧客ID (PK)氏名注文履歴JSONカート内商品ID配列レビュー全て血液型注文注文ID (PK)注文日顧客IDレビューレビューID (PK)評価本文サブカテゴリサブカテゴリID (PK)名称親カテゴリID注文明細明細ID (PK)商品名数量

変なER図 の「配送先」エンティティは、 意味的には 顧客に従属する弱エンティティ であるはず (「田中さんの自宅」「田中さんの会社宛」という 文脈なしには成立しない) にもかかわらず、実装が 「配送先ID」という独立の主キー になっており、 顧客エンティティとの関連さえ引かれていない。

正しくは「顧客 — 配送先」を関連で繋ぎ、配送先側の主キーを(顧客ID, 配送先連番) のような複合キーにする。 これで「田中さんの自宅」「田中さんの会社宛」を配送先ID なしで一意に区別できる。

変なER図 との対応: 違和感 #8「注文明細」の識別関係 PK 非継承

架空 EC サイト運営システム ER 図
発注確定購入階層所属明細8P対象配送先配送先ID (PK)郵便番号住所カテゴリカテゴリID (PK)名称サブカテゴリID商品商品ID (PK)商品名価格カテゴリID顧客顧客ID (PK)氏名注文履歴JSONカート内商品ID配列レビュー全て血液型注文注文ID (PK)注文日顧客IDレビューレビューID (PK)評価本文サブカテゴリサブカテゴリID (PK)名称親カテゴリID注文明細明細ID (PK)商品名数量8

変なER図 の「注文明細」は、意味的には 注文に従属する弱エンティティ (識別関係の子) として描かれている。 にもかかわらず、注文明細の主キーは 「明細ID」単独 になっており、 親の 注文ID が主キーに継承されていない。

識別関係で親と繋がっている以上、注文明細の主キーは(注文ID, 明細番号) の複合キーになるべき。 設計意図 (識別関係 = 弱として扱う) と 主キー構成 (独立キー = 強として扱う) が矛盾している状態は、 読み手に「どっちが正しい?」と迷わせる。

#7 と #8 は、両方とも 「本来弱として扱うべきものを強のように描いた」という大枠は共通するが、破綻の出方は違う。#7 (配送先) は関連そのものが引かれておらず「親が誰か不明」の 関係欠落型#8 (注文明細) は識別関係の線は引かれているのに主キーが親を継承しておらず 「意匠と実装の不整合」の PK 非継承型。 前者は「関連を追加する」、後者は「主キーを (親ID, 連番) の複合キーに直す」で修正する。

よくある疑問

Q.弱エンティティと識別関係は違うものですか?
A.実質同じ現象を別角度から呼んだ用語です。エンティティ側から見ると「弱エンティティ」、それを親に繋ぐ関連側から見ると「識別関係」。逆に「強エンティティ」と「非識別関係」もペア。IE 記法ではどちらも主キーが親のキーを含むかどうかで判別します。
Q.弱エンティティと連関実体は同じですか?
A.似ているが違う。弱エンティティは「親に依存して識別される」性質そのもの、連関実体は「多対多を分解するために挟む第 3 のエンティティ」の役割。連関実体は多くの場合、弱エンティティの一種として実装される。
Q.弱エンティティを強エンティティに書き直すこともできますか?
A.できる。注文明細に独自の代理キー (明細ID) を付けて主キーにすれば強エンティティ扱いに近づく。ただし「親を消したら子は無意味」という業務ルールは残るので、実装上は FK に ON DELETE CASCADE を付けるなど、親子関係のライフサイクルは意識する必要がある。

関連トピック

もっと学びたい方へ(おすすめ書籍)

おすすめ
達人に学ぶDB設計徹底指南書 第2版
ミック

テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。

Amazon で見る →
おすすめ
楽々ERDレッスン (CodeZine BOOKS)
羽生章洋

ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。

Amazon で見る →
情報処理教科書 データベーススペシャリスト 2025年版
三好康之

IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。

Amazon で見る →
理論から学ぶデータベース実践入門
奥野幹也

リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。

Amazon で見る →
達人に学ぶSQL徹底指南書 第2版
ミック

SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。

Amazon で見る →
SQLアンチパターン 第2版
Bill Karwin

実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。

Amazon で見る →
[改訂3版]内部構造から学ぶPostgreSQL
勝俣智成 ほか

PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。

Amazon で見る →

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講