
ER図とは?
テーブル間の関連を見やすくした図のことです。
中小規模の開発であれば、数十個のエンティティになりますし、大規模システムであれば、数百個のエンティティになったりもします。
そんな莫大な数のエンティティ同士の関係を助けもなしに理解するのは、常人には困難です。
そのため、正規化されて複雑化したテーブル構成の中で、システム構造を早く把握するのに図を作るのは最適な手法になります。
ER図の表記方法
ER図には、下記二つの表記があります。
| 表記法 | 説明 |
|---|---|
| IE(Information Engineering) | ジェームズ・マーチンという方が開発した。 |
| IDEF1X | アメリカ空軍が開発した。 |
表記方法
基本的なこと

| 要素 | 説明 |
|---|---|
| 四角の上の項目(USER_MASTER) | 「エンティティ名」を示します。 |
| 四角の中の項目(USER_ID、DEPT_NO等) | 「属性」を示します。 |
| 四角の中の一番上の要素(USER_ID) | 「主キー」を表します。 |
多重度(カーディナリティについて)
テーブル間の関係を示す場合は下記のように表記します。
| 項目 | 説明 |
|---|---|
| 1 | |
| 0または1 | |
| 多 | |
| 多(0以上) | |
| 多(1以上) |
利用例
例えば、「ユーザーテーブル」と「認証情報テーブル」で言えば、必ず1:0または1になるので、下記のようなリレーションになります。

ER図を作成するには?
有料版であれば
Visio
フリー版
wwwsqldesigner
- Webアプリ(JavaScriptベースで動いている。)
- 出来上がったER図から、SQLの作成も可能。
A5:SQL Mk-2
- 既存DBからER図を作成できる。
- 出来上がったER図から、SQLの作成も可能。
- テーブル定義書の自動生成機能がある。(Excel形式)
「A5:SQL Mk-2」の始め方については、下記の記事で解説しています。
SchemaSpy
- Javaで出来てるので、動かすのにJREが必要。
- コマンドラインからER図を作れる。
- 既存DBからER図を自動生成できる。
参考:DBスペシャリストのER図
エンティティ(エンティティタイプ)
対象物をモデル化したものです。試験では「エンティティタイプ」と表現されています。

多重度
1:1

例
- 見積(1):契約(1)
1:多
矢印の元が1で、矢印の先が多になります。基本はこれになります。

例
- 部署(1):社員(多)
- 見積(1):分割契約(多)
- 複数見積(多):1活契約(1)
多:多
原則第三正規系までは行うのでこれはあまり使われることはありません。もし、この関係になった場合は中間テーブルを設けて1:多の関係にし直すことがほとんどです。(これを連関エンティティと呼びます。)

例
- 1つの注文で複数の商品を紐付けれるし、1つの商品を複数回の注文に分けて販売する。
オプショナリティ
| 表記 | 多重度 | 相手のインスタンス | 説明 |
|---|---|---|---|
![]() |
1 | 必須ではない | 相手インスタンスは0または1、例えば、「受注」と「発注」のように「受注」したからと言ってすぐに「発注するわけでない」場合等に使います。 |
![]() |
1 | 必須である | 相手インスタンスは必ず1、例えば部署と社員であれば社員は必ずどこかの部署に所属するので部署側に黒丸がつきます。 |
![]() |
多 | 必須ではない | 相手インスタンスは0以上 |
![]() |
多 | 必須である | 相手インスタンスは1以上、「受注」と「受注明細」のように必ずどちらも存在する前提の場合等に使用されます。 |
リレーションシップパターン
リレーションシップには特殊なパターンがいくつか存在するので抑えておきましょう。
自己参照
自エンティティを参照する場合もあります。

例
- シリーズ物の作品で第1作目への作品コードを保持したい場合
複数リレーションシップを行うパターン
複数のリレーションを張るパターンもあります。

例
- 親テーブルに品目テーブルがあって、子テーブルには「親品目カラム」と「子品目カラム」というように同じテーブルを参照する場合








この記事へのコメントはありません。