ER図(Entity-Relationship Diagram、エンティティ・リレーションシップ図)は、データベース設計において重要な役割を果たす視覚的なツールです。ER図を使用することで、システム内のデータの構造を視覚的にモデル化し、エンティティ間の関係を明確にすることができます。この記事では、ER図の基本概念やその作成方法、さらにその活用方法について解説します。
[目次を開く]
ER図の基本概念
ER図は、データベースの論理設計を行う際に使用されます。この図は、データの構造を視覚的に表現し、データベース内でどのようにデータが関連付けられているかを示します。ER図の基本要素は以下の通りです:
1. エンティティ(Entity)
エンティティとは、データベース内で管理する対象物や概念のことを指します。エンティティは実体とも呼ばれ、テーブルとして実装されることが一般的です。例えば、顧客情報を管理するための「顧客」や、製品情報を管理するための「製品」がエンティティに該当します。
エンティティは、四角形のボックスで表されます。
2. 属性(Attribute)
属性は、エンティティに関連付けられたデータ項目です。各エンティティは複数の属性を持ちます。例えば、「顧客」エンティティには「顧客ID」、「氏名」、「住所」などの属性が含まれます。属性はテーブルのカラムとして表現されます。
属性は、楕円形の図形でエンティティと接続して表されます。
3. リレーションシップ(Relationship)
リレーションシップは、エンティティ間の関連性を表します。例えば、「顧客」と「注文」の間には、顧客が注文を行うというリレーションシップが存在します。リレーションシップは、エンティティ同士を結びつけ、どのような関連があるかを示します。
リレーションシップは、ダイヤモンド形の図形でエンティティ間を結ぶ形で表現されます。
4. 主キー(Primary Key)と外部キー(Foreign Key)
主キーは、各エンティティの中で一意に識別できる属性を指します。例えば、「顧客ID」が「顧客」エンティティの主キーとなります。一方、外部キーは他のエンティティの主キーを参照する属性で、エンティティ間の関連を確立します。
erDiagram
CUSTOMER {
int id PK
string name
string email
}
ORDER {
int id PK
date order_date
float total_amount
int customer_id FK
}
PRODUCT {
int id PK
string name
float price
}
ORDER_PRODUCT {
int order_id PK, FK
int product_id PK, FK
int quantity
}
CUSTOMER ||--o{ ORDER : "places"
ORDER ||--o{ ORDER_PRODUCT : "contains"
PRODUCT ||--o{ ORDER_PRODUCT : "is included in"
ER図の記法
ER図の記法は、幾つかのバリエーションがありますが、基本的な要素は共通しています。以下は一般的な記法の一部です:
- Chen記法: 最も伝統的な記法で、エンティティを四角形、属性を楕円形、リレーションシップをダイヤモンド形で表現します。
- Crow's Foot記法: 実務でよく使われる記法で、リレーションシップを「足跡」の形で表現し、多重度(1対1、1対多、多対多)を明示します。
graph LR
subgraph "Chen記法"
A["エンティティ"]
B["リレーションシップ"]
C["属性"]
A -- "関連" --> B
B -- "関連" --> A
A -- "持つ" --> C
C -- "属する" --> A
end
subgraph "Crow's Foot記法"
X["エンティティ"]
Y["リレーションシップ"]
Z["エンティティ"]
X --o Y
Y --o Z
end ER図の作成手順
ER図を作成する際の基本的な手順は次の通りです:
- エンティティの定義: システム内で管理する必要がある主なエンティティを特定し、リスト化します。これには、顧客、注文、製品などのエンティティが含まれます。
- 属性の定義: 各エンティティに必要な属性を定義します。例えば、顧客エンティティには、顧客ID、氏名、住所などが含まれます。
- リレーションシップの設定: エンティティ間の関連を定義し、どのようなリレーションシップが存在するかを決めます。例えば、顧客と注文の間には、1対多のリレーションシップが存在します。
- 主キーと外部キーの設定: 各エンティティの主キーを設定し、必要に応じて外部キーを定義します。これにより、エンティティ間の関係が確立されます。
- ER図の作成: 上記の情報を基に、ER図を作成します。これは手描きでも、ソフトウェアを使用してもかまいません。
ER図の活用方法
ER図はデータベース設計の初期段階で使用されるだけでなく、他の多くの場面でも役立ちます。以下はその一例です:
1. データベースの構築
ER図を基に、リレーショナルデータベースを構築します。ER図が正確に描かれていれば、そのままデータベーススキーマとして実装することが可能です。
2. システムのドキュメント化
ER図は、システムのデータ構造を視覚的に表現するため、ドキュメントとして非常に有用です。開発者間での共通理解を助け、新たなメンバーのオンボーディングを容易にします。
3. システムのリファクタリング
既存のシステムをリファクタリングする際、ER図を使用してデータ構造を再評価し、改善点を見つけることができます。これにより、システム全体の効率性と保守性が向上します。
Mermaid記法でのER図の書き方
Mermaid記法でER図を作成するための基本的な方法を以下に紹介します。Mermaidには、ER図を表現するための専用の記法が用意されています。
基本構文
MermaidでER図を描く際は、erDiagramキーワードを使用します。以下に基本的な構文を示します。
erDiagram
"EntityName1" {
int Attribute1 PK
string Attribute2
string Attribute3
}
"EntityName2" {
int AttributeA PK
string AttributeB
}
"EntityName1" ||--o{ "EntityName2" : "RelationshipName" erDiagram
"EntityName1" {
int Attribute1 PK
string Attribute2
string Attribute3
}
"EntityName2" {
int AttributeA PK
string AttributeB
}
"EntityName1" ||--o{ "EntityName2" : "RelationshipName"
説明
- エンティティの定義:
EntityNameでエンティティを定義し、ブロック内で属性(Attribute)を列挙します。属性の型(int,string,floatなど)と属性名を指定します。PKは主キー、FKは外部キーを表します。 - 属性の定義:各エンティティ内に定義される属性は、そのエンティティの持つデータ項目を表します。例えば、
Attribute1はEntityName1の一部として定義され、型としてintが指定されています。 - リレーションシップの定義:エンティティ間のリレーションシップを
||--o{のようなシンボルで表現します。||は1対1、o{は1対多のリレーションシップを意味します。 - リレーションシップのラベル:リレーションシップの種類や意味を表すために、
RelationshipNameを使用します。
リレーションシップの種類
-
||--||: 1対1の関係 -
}o--||: 多対1の関係 -
||--o{: 1対多の関係 -
}o--o{: 多対多の関係
ちなみにNotisonのコードブロックもMermaid記法に対応しています。以下のようにコードブロックでMermaidを選択しコードを選択するとコードを編集することができます。プレビューを選択すると以下の画像のように図としてプレビューしてくれます。手軽にER図などを書くことができるので、ぜひ、試してみてください。
まとめ
ER図は、データベース設計において不可欠なツールです。エンティティ、属性、リレーションシップなどの基本要素を理解し、適切な手順でER図を作成することで、効率的かつスケーラブルなデータベースを設計できます。また、ER図はドキュメント化やシステムの改善にも役立つため、開発プロセス全体を通じて有用です。正確なER図を作成し、システムの基盤をしっかりと構築しましょう。

