ER図とデータモデリング

ER図とは

ER図(Entity-Relationship Diagram)は、システムで扱うデータをエンティティ(実体)とリレーションシップ(関係)で図にしたものです。[[リレーショナルデータベース]] のテーブル設計の設計図として使われます。

  • エンティティ — 管理したい「モノ・コト」。顧客、商品、注文など。テーブルに対応する
  • 属性 — エンティティが持つ情報。顧客なら名前・メールアドレスなど。列に対応する
  • リレーションシップ — エンティティ同士のつながり。「顧客が注文する」など

コードを書く前にER図を描くことで、抜けている情報や不自然な構造に早く気づけます。

カーディナリティ — 1対多と多対多

関係には「何対何か」というカーディナリティ(多重度)があります。ここがER図の読み書きの中心です。

関係テーブルでの表現
1対1社員 と 社員証どちらかに相手のIDを持つ
1対多顧客 と 注文「多」側(注文)に顧客IDを持つ
多対多学生 と 講義中間テーブル(受講)を挟んで1対多×2に分解

多対多はそのままテーブルにできないため、中間テーブルに分解するのが定石です。この判断はER図の段階で済ませておきます。

データモデリングの進め方

  1. 業務の名詞を洗い出してエンティティ候補にする(注文、請求、在庫…)
  2. エンティティ間の関係と多重度を決める
  3. 属性と [[主キーと外部キー]] を決め、[[正規化]] で重複を整理する
  4. ER図をチームでレビューし、テーブル定義([[SQL]] の CREATE TABLE)に落とす

この流れは [[要件定義]] の内容を「データの形」に翻訳する作業とも言えます。業務を知る人とER図を見ながら会話できることが大きな価値です。

初学者向けポイント

  • 記法は IE記法(カラスの足のような線で多側を表す)がよく使われる。Mermaid や draw.io などのツールでテキストからも描ける
  • 完璧な図を最初から目指さない — 主要エンティティ5〜10個の関係が合っていることがまず重要
  • 実装後もER図を更新し続けると、新メンバーがデータ構造を把握する最短の資料になる

関連技術とのつながり

  • [[リレーショナルデータベース]] — ER図はテーブル設計の設計図
  • [[正規化]] — 属性の整理・分割の指針
  • [[SQL]] — ER図の内容を CREATE TABLE として実装する
  • [[要件定義]] — 業務要件をデータ構造へ翻訳する入り口
Q: ER図のエンティティはデータベースの何に対応する?
- [x] テーブル
- [ ] インデックス
- [ ] ユーザーアカウント
解説: エンティティは管理したい「モノ・コト」で、実装ではテーブルに対応します。属性が列に対応します。

Q: 多対多の関係をテーブルにするときの定石はどれ?
- [ ] 両方のテーブルを1つに統合する
- [x] 中間テーブルを挟んで1対多×2に分解する
- [ ] 多対多のまま2つのテーブルに互いのIDを持たせる
解説: 多対多はそのまま表現できないため、受講テーブルのような中間テーブルに分解します。

Q: 1対多の関係(顧客と注文)で、相手のIDを持つのはどちら?
- [ ] 「1」側(顧客)が注文IDの一覧を持つ
- [x] 「多」側(注文)が顧客IDを持つ
- [ ] どちらも相手のIDを持たない
解説: 1対多では「多」側のテーブルに外部キー(顧客ID)を持たせるのが基本です。