ER図とデータモデリング
ER図とは
ER図(Entity-Relationship Diagram)は、システムで扱うデータをエンティティ(実体)とリレーションシップ(関係)で図にしたものです。[[リレーショナルデータベース]] のテーブル設計の設計図として使われます。
- エンティティ — 管理したい「モノ・コト」。顧客、商品、注文など。テーブルに対応する
- 属性 — エンティティが持つ情報。顧客なら名前・メールアドレスなど。列に対応する
- リレーションシップ — エンティティ同士のつながり。「顧客が注文する」など
コードを書く前にER図を描くことで、抜けている情報や不自然な構造に早く気づけます。
カーディナリティ — 1対多と多対多
関係には「何対何か」というカーディナリティ(多重度)があります。ここがER図の読み書きの中心です。
| 関係 | 例 | テーブルでの表現 |
|---|---|---|
| 1対1 | 社員 と 社員証 | どちらかに相手のIDを持つ |
| 1対多 | 顧客 と 注文 | 「多」側(注文)に顧客IDを持つ |
| 多対多 | 学生 と 講義 | 中間テーブル(受講)を挟んで1対多×2に分解 |
多対多はそのままテーブルにできないため、中間テーブルに分解するのが定石です。この判断はER図の段階で済ませておきます。
データモデリングの進め方
- 業務の名詞を洗い出してエンティティ候補にする(注文、請求、在庫…)
- エンティティ間の関係と多重度を決める
- 属性と [[主キーと外部キー]] を決め、[[正規化]] で重複を整理する
- 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)を持たせるのが基本です。