ERD(エンティティ関係図)

ERD について

「エンティティ関係図」(ERD: Entity-Relationship Diagram)はリレーショナルデータベースの構造を文書化します:テーブル(エンティティ)、その列(属性)、それらの間の外部キー関係 — カーディナリティ(1..1 / 0..1 / 1..N / 0..N)を含みます。バックエンドエンジニアは新しいチームメンバーにコードベースを説明するために描きます。データアーキテクトは DDL を書く前にホワイトボードでスケッチします。データベース教育者(Elmasri & Navathe; Silberschatz / Korth / Sudarshan)はすべての CS データベースコースの概念設計ユニットの中心に置いています。

Schematex はクロウズフット記法(crow's-foot notation)を実装します — MySQL Workbench、dbdiagram.io、ERDPlus、Lucidchart、draw.io、Mermaid erDiagram、Oracle SQL Developer Data Modeler が使用するデファクト現代スタイルです。DSL は DBML と互換性があるためエンジニアがコピー&ペーストでき、完全な Mermaid erDiagram 方言も受け付けますerDiagram ヘッダで始まり、Mermaid のリレーションシップ(CUSTOMER ||--o{ ORDER : places)とタイプファーストのエンティティブロック(ORDER { int id PK })をそのまま貼り付けられます。エンティティはリレーションシップから自動作成されます。Chen 1976 記法(矩形 + ダイヤモンド + 楕円 + ISA 階層)と Barker オーバーレイは v0.2 に延期されています。今日、すべてのダイアグラムはクロウズフットでレンダリングされます。

注意 — これは entity エンジンと同じではありません。entity(エンティティ構造)は企業 / 法的所有権の階層(子会社、割合のロールアップ、信託)のためのものです。erdデータベーススキーマ(テーブル、列、外部キー)のためのものです。ドメイン、レイアウト、対象者が異なります。

erd·§
↘ preview
100%
University Schema Entity-Relationship Diagram with 4 entities and 3 relationships. University Schema majors in Major major_id int PK name varchar Course course_id int PK title varchar credits int Student student_id int PK name varchar email varchar UK major_id int FK Enrollment student_id int PK FK course_id int PK FK grade char
UTF-8 · LF · 30 lines · 674 chars✓ parsed·4.9 ms·8.1 KB SVG

1. 最初の ERD

最小限の実用的な ERD:外部キーで子が親を参照。

erd·§
↘ preview
100%
Schematex ERD Entity-Relationship Diagram with 2 entities and 1 relationships. places Customer customer_id int PK email varchar UK Order order_id int PK customer_id int FK
UTF-8 · LF · 10 lines · 252 chars✓ parsed·0.7 ms·4.3 KB SVG

使用法の 80% をカバーする 4 つのルール:

  1. erd で始めます。オプションのヘッダ title:direction: LR | TB
  2. 各テーブルはブロックです:table Name { col type marker }。マーカーは PKFKUKNN(または *、NOT NULL の意味)。
  3. インライン外部キーターゲット:列に FK -> Other.column を追加します。レンダラーは FK ピルを自動的に追加します。
  4. テーブルを ref 行で接続します:ref Source <left-card> -- <right-card> Target [: "label"]。カーディナリティは one-mandatoryone-optionalmany-mandatorymany-optional(名前付き形式)、1..1 / 0..1 / 1..N / 0..N(Min-Max)、または Mermaid グリフ(}o--|| など)のエイリアスのいずれかです。

コメントは // または # を使用します。ブロック形式は複数行(1 行に 1 列)またはインライン(table A { id int PK; name varchar })のどちらでも可能です。


2. カーディナリティグリフ

クロウズフットはリレーションシップ線の各端のカーディナリティをエンコードします:

グリフ読み方Min..Max名前付きトークン
─┃(垂直バー)ちょうど 1 つ(必須の 1 つ)1..1one-mandatory
─○(開いた円)0 または 1 つ(オプションの 1 つ)0..1one-optional
─┃<(バー + クロウズフット)1 つ以上(必須の多数)1..Nmany-mandatory
─○<(円 + クロウズフット)0 以上(オプションの多数)0..Nmany-optional

線の各端は独立してアノテーションが付けられます。典型的な 1:N リレーションシップは「ちょうど 1 人の CUSTOMER が 0 以上の ORDER を行う」と読みます:

ref Order.customer_id many-mandatory -- one-mandatory Customer.customer_id : "places"

右から左に読む:線の右端は 1 本のバー(one-mandatory)で Customer に接続。左端はバー + クロウズフット(many-mandatory)で Order に接続。


3. Mermaid エイリアス

すでに Mermaid erDiagram を使っている場合、同じグリフが入力として機能します:

erd·§
↘ preview
100%
Schematex ERD Entity-Relationship Diagram with 3 entities and 2 relationships. places contains Customer customer_id int PK email varchar UK Order order_id int PK customer_id int FK Product product_id int PK name varchar
UTF-8 · LF · 7 lines · 266 chars✓ parsed·1.0 ms·5.8 KB SVG
Mermaid トークンSchematex の意味
|o 左 / o|0..1
||1..1
}o 左 / o{0..N
}| 左 / |{1..N
--識別 / 実線
..非識別 / 破線

4. 識別関係と非識別関係

識別関係(実線)には --、非識別(破線)には .. を使用します:

erd·§
↘ preview
100%
Schematex ERD Entity-Relationship Diagram with 2 entities and 1 relationships. logs (optional FK) User id int PK email varchar SessionLog id int PK user_id int FK created_at timestamp
UTF-8 · LF · 5 lines · 214 chars✓ parsed·0.7 ms·4.4 KB SVG

破線は Barker / IDEF1X の非識別慣習に従います。


5. 複合主キー(関連テーブル)

関連(ジャンクション)テーブルは M:N リレーションシップを解決します。PK + FK の列には両方の PKFK をマークします:

erd·§
↘ preview
100%
Schematex ERD Entity-Relationship Diagram with 3 entities and 2 relationships. Student student_id int PK name varchar Course course_id int PK title varchar Enrollment student_id int PK FK course_id int PK FK grade char
UTF-8 · LF · 10 lines · 381 chars✓ parsed·0.8 ms·5.7 KB SVG

Schematex は同じ行に両方のピル(PK + FK)をレンダリングします。PK マーカーが存在する場合、列名に PK アンダーラインが適用されます。


6. レイアウト方向

direction: LR(デフォルト)は親テーブルを左、子テーブルを右に配置します。direction: TB は上から下にフリップします — 狭い埋め込みに便利です:

erd·§
↘ preview
100%
Library (top-down) Entity-Relationship Diagram with 3 entities and 2 relationships. Library (top-down) borrowed by of Member id int PK name varchar email varchar UK Book id int PK title varchar author varchar Loan id int PK member_id int FK book_id int FK due_date date
UTF-8 · LF · 10 lines · 409 chars✓ parsed·1.3 ms·6.7 KB SVG

単一ベンドエッジを持つ層状の直交マンハッタンルーティング。v0.1 はレイヤー内で外観順のスタッキングを使用します。重心交差削減は v0.2 に延期されています。


7. 記法モード

DSL ヘッダで記法を固定できます:

erd
notation: crowsfoot     // default — only mode supported in v0.1

notation: chen(矩形-ダイヤモンド-楕円、弱エンティティ、三項、ISA)と notation: barker(半分ごとの破線)は 27-ERD-STANDARD.md に文書化されていますが、今日のパーサーでは拒否されます。v0.2 が目標です。


8. v0.1 の制限

  • クロウズフットのみ。 Chen と Barker のレンダリングは延期。
  • エッジ交差最小化なし。 層状配置は層内の宣言順を使用します。大きな ERD(10 以上のテーブル、密な FK)では交差が見られます。特定のレイアウトが重要な場合は table ブロックを並べ替えてください。
  • 自己参照 C ループなし。 再帰的なリレーションシップ(Employee.manager_id -> Employee.id)は解析されますが、標準的な C 字形ではなく直角の直線としてルーティングされます。
  • M:N の自動解決なし。 関連エンティティを明示的に表現してください(これはいずれにせよ本番スキーマの標準的なプラクティスです)。

完全な標準リファレンスについては docs/reference/27-ERD-STANDARD.md を参照してください。


関連例

サンプルギャラリーからすぐに使えるシナリオ:

erd·§ Crow's-foot (Everest 1976) / DBML compatible
University Schema Entity-Relationship Diagram with 4 entities and 3 relationships. University Schema majors in Major major_id int PK name varchar Course course_id int PK title varchar credits int Student student_id int PK name varchar email varchar UK major_id int FK Enrollment student_id int PK FK course_id int PK FK grade char
University schema (academic ERD)
Classic textbook schema with Student / Course / Enrollment associative entity and labelled relationships — the canonical Elmasri & Navathe ch.3 example.
education
erd·§ Crow's-foot (Everest 1976) / DBML compatible
E-commerce Schema Entity-Relationship Diagram with 6 entities and 5 relationships. E-commerce Schema places Customer customer_id int PK email varchar UK name varchar created_at timestamp Category category_id int PK name varchar Address address_id int PK customer_id int FK line1 varchar city varchar zip varchar Order order_id int PK customer_id int FK placed_at timestamp status varchar Product product_id int PK category_id int FK name varchar price decimal OrderLine order_id int PK FK line_no int PK product_id int FK qty int price decimal
E-commerce schema
Production-style schema with Customer / Order / OrderLine / Product / Category — typical mid-complexity backend ERD with composite PK on the line-item table.
software & it

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.