はじめに
こんにちは!今日はE-R図(Entity-Relationship Diagram, 実体関連図)についてまとめます。E-R図は、データ中心アプローチにおける概念データモデルを可視化し、エンティティ(実体)とリレーションシップ(関係)を明確にします。これにより、データ構造や相互関係を理解しやすくなり、論理・物理データモデルへの移行や実装時のガイドとなります。
本文
E-R図の基本
E-R図は、以下の基本要素からなります。
- エンティティタイプ(実体型):データとして管理する物や概念。長方形で表記し、その中にエンティティタイプ名を記入します
- リレーションシップ(関連):エンティティタイプ同士の関係性を示します。線で結び、カーディナリティ(1対1、1対多、多対多など)を明示します
「顧客」エンティティと「受注」エンティティは、1人の顧客に対して複数の受注が紐づくため、1対多の関係を示します。
カーディナリティと表記法
- 1対1(1:1):片方の主キーをもう一方で外部キーとして保持
- 1対多(1:N):1側の主キーを多側で外部キーとして保持
- 多対多(M:N):直接テーブル同士を多対多に結ぶ関係は存在しないため、中間となる「関連エンティティ」を導入して1対多+多対1に分解するケースが多い
存在必須性を表すため、必須の場合は「●(塗りつぶし)」、任意の場合は「○(空)」で表す記法もあります(記法はツールや手法による差異あり)
(必須)●----○(任意)
左側が必須、右側が任意であることを示します。
多対多リレーションシップと関連エンティティ
多対多関係は、関係モデルでは直接表現できません。そのため、多対多を解消するための関連エンティティを導入します。
「商品」-「受注」の間に「商品受注明細」という中間エンティティを設けることで、多対多を1対多と多対1に分解します。
UMLによる表記
オブジェクト指向開発で用いられるUML(クラス図)を用いる方法もあります。
- エンティティタイプをクラスとして表し、リレーションシップをクラス間の関連として描画
- カーディナリティは多重度で表し、
1
,0..1
,1..*
,0..*
などを用います - 多対多は
*..*
で表現し、必要に応じて関連クラス(中間クラス)を導入します
スーパータイプ・サブタイプ(汎化・特化)
E-R図では、汎化・特化関係(スーパータイプ・サブタイプ)を表すことができます。
- スーパータイプ:共通属性・共通主キーを持つ上位概念
- サブタイプ:スーパータイプを特定化(特化)した下位概念
- サブタイプ間に排他性(あるタプルは1つのサブタイプにしか属さない)や共存性(複数サブタイプに所属可能)を表すことが可能
- 完全・不完全サブタイプ:すべてのスーパータイプのタプルがサブタイプに存在する場合は完全、一部がどのサブタイプにも属さない場合は不完全。サブタイプが1つしかないスーパータイプは包含関係という
ここで△は汎化・特化を示す記号。
実装時にはサブタイプごとにテーブルを分けたり、1つのテーブルでタイプ区分列を設けて管理するなど、状況によって様々です。
階層構造
同じエンティティ間で階層構造(親子関係)を表すことも可能です。
たとえば「組織」エンティティ内で上位部門と下位部門が1対多の関係で表せます。
組織テーブルには親組織ID
カラムを持たせることで、ツリー構造を表現できます。
同じエンティティ間の複数リレーションシップ
同じ2つのエンティティ間に、複数の異なるリレーションシップが存在する場合も、E-R図上で複数の関係線を描くことで表現できます。
上司-部下関係と、メンター-メンティー関係など、同一エンティティ間で異なる意味の関係を2本のリレーションで表します。
まとめ
今回は、E-R図を用いたデータモデルの表現方法を整理しました。
- E-R図でエンティティタイプとリレーションシップを明確にすることで、データ構造を直感的に理解可能になります
- カーディナリティ、関連エンティティ、スーパータイプ・サブタイプ、階層構造など、様々な概念を図示して問題を早期発見・解決できます
- UMLクラス図を用いる方法や実装時のテーブル分解など、実装フェーズへの橋渡しとしても有効です
E-R図の理解は、データベース設計やアプリケーション開発において重要です。