Guide · ER 図

ER 図の書き方:crow's foot 記法の読み方と描き方

線の端の記号が読めれば、ER 図はぐっと読みやすくなります。crow's foot 記法の 4 つの記号と、よく出てくる関係の描き方をまとめました。

公開 2026.10.04 · Joinery

ER 図(Entity Relationship Diagram)は、テーブルとテーブルの関係を図で表したものです。記法はいくつかありますが、実務で最もよく使われているのが crow's foot 記法(IE 記法)です。この記事では、記号の読み方と、よくある関係の描き方を説明します。

ER 図を構成する 3 つの要素

  • エンティティ:管理する対象。図では箱で描き、実際の DB ではテーブルになります。
  • 属性:エンティティが持つ項目。箱の中に並べ、DB では列になります。主キーには印を付けます。
  • リレーション:エンティティ同士の関係。箱と箱を結ぶ線で描き、両端の記号で数を表します。

crow's foot の 4 つの記号

線の端には 2 つの記号が並びます。箱に近い側が「最大いくつか」、遠い側が「最小いくつか」を表します。縦線は 1、丸は 0、三つ又(カラスの足)は「多」です。

1 つだけ0 か 11 以上0 以上 テーブルテーブルテーブルテーブル 必須・1任意・1 必須・多任意・多

1 対多の描き方

最もよく出てくる関係です。「顧客 1 人に対して受注が 0 件以上ある」場合、顧客側に「1 つだけ」、受注側に「0 以上」の記号を付けます。DB では、多の側(受注)に外部キー customer_id を持たせます。

Table customers {
  id bigint [pk]
}
Table orders {
  id bigint [pk]
  customer_id bigint [not null, ref: > customers.id]  // 多 → 1
}

外部キーが NOT NULL なら、受注には必ず顧客がいるので顧客側は「1 つだけ」(必須)。NULL を許すなら「0 か 1」(任意)になります。

多対多は中間テーブルで表す

「受注には複数の商品が含まれ、商品は複数の受注に出てくる」のような多対多は、リレーショナル DB ではそのまま表せません。間に中間テーブル(受注明細)を置き、1 対多を 2 つに分けます。

Table order_items {
  order_id bigint [not null, ref: > orders.id]
  product_id bigint [not null, ref: > products.id]
  quantity int [not null]
  indexes { (order_id, product_id) [pk] }
}

中間テーブルには、数量や単価のように「その組み合わせに固有の情報」を持たせられます。

1 対 1 の描き方

「商品 1 つに在庫レコードが 1 つ」のような関係です。外部キーに UNIQUE を付ける(または外部キーをそのまま主キーにする)ことで、1 対 1 を DB で保証できます。1 対 1 は 1 つのテーブルにまとめられることも多いので、分ける理由(更新頻度が大きく違う、権限を分けたい)があるかを確認してください。

読みやすい ER 図にするコツ

  • まとまりごとに色分けする:顧客・受注・商品・請求のように、業務のまとまりでグループにします。
  • 1 枚に詰め込みすぎない:テーブルが多いときは、関係するテーブルだけを表示した図を目的ごとに用意します。
  • 線の交差を減らす:参照されることの多いテーブル(顧客や商品)を中央に置くと、線が整理されます。
  • 図と DDL を別々に管理しない:手で描いた図は、DDL を変えたときに更新されません。

Joinery では、DBML のリレーションと外部キーの NOT NULL・UNIQUE から、ここで紹介した記号を自動で描きます。詳しくは Mac で使える ER 図作成ツール をご覧ください。

記号は自動で付けてもらう

Joinery は外部キーの NOT NULL と UNIQUE から crow's foot の記号を自動で描き、図とテキストを同期します。