ErdDocs

ER図の記号

ER図の記号には大きく三つの流儀があります。データベースのツールが描く IE記法(鳥の足、クロウズフット)、教科書で習う Chen 記法、データにも使われる UML です。どれもテーブル(エンティティ)を箱で、リレーションを箱どうしを結ぶ線で表します。違うのは「カーディナリティ」の書き方です。カーディナリティとは、片側の 1 行に反対側の何行が対応するかのことです。IE記法では線の端に記号を描き、1 本の線を両方向から読みます。以下の記号はすべて読み方つきで、ErdDocs が描いています。下のツールでご自身のスキーマに使うのと同じ記法です。

IE記法(鳥の足)の線端の意味

IE記法では、すべてが線の端で決まります。端には記号が二つまで重なり、テーブルに近い方が最大、遠い方が最小を表します。

記号名前読み方例
ちょうど 1ちょうど 1縦線+縦線:最小 1、最大 1注文はちょうど 1 人の顧客に属する
0 または 10 または 1丸+縦線:任意、最大 1顧客が持つポイントカードは最大 1 枚
1 以上1 以上縦線+鳥の足:少なくとも 1注文には明細が少なくとも 1 行ある
0 以上0 以上丸+鳥の足:いくつでも、0 も可顧客の注文は 0 件以上
IE記法(鳥の足)の早見表。4 種類の線端の記号:ちょうど 1(縦線と縦線)、0 または 1(丸と縦線)、1 以上(縦線と鳥の足)、0 以上(丸と鳥の足)IE記法(鳥の足)の早見表。4 種類の線端の記号:ちょうど 1(縦線と縦線)、0 または 1(丸と縦線)、1 以上(縦線と鳥の足)、0 以上(丸と鳥の足)
同じ 4 種類の線端を 1 枚のカードにしました。画像を保存するか、SVG をライトまたはダークでダウンロードしてください。

1 本の線の読み方

リレーションの線は、それぞれのテーブルに向かって 2 回読みます。定番の例:

orders に向かって:顧客は 0 件以上の注文を持つ。customers に向かって:注文はちょうど 1 人の顧客に属する。customersorders
orders に向かって:顧客は 0 件以上の注文を持つ。customers に向かって:注文はちょうど 1 人の顧客に属する。

スキーマが半分しかわかっていないときに記号が何を意味するかも含め、読み方の規則の全体は IE記法(鳥の足)のページにあります。どの組み合わせを選ぶかは カーディナリティの問題です。

Chen・IE記法・UML の比較

概念ChenIE記法(鳥の足)UML
エンティティ/テーブル長方形カラム一覧を中に持つ箱クラスの箱
属性エンティティにつながる楕円テーブルの箱の中の 1 行クラスの箱の中のフィールド
リレーションエンティティ間のひし形両端にカーディナリティ記号のある線関連の線
カーディナリティひし形のそばの 1・N・M線端の縦線・丸・鳥の足1、0..1、1..*、* の多重度
主キー下線を引いた属性名カラム行のキー表示ステレオタイプなど

目安:構想段階は Chen、アプリのコードと並べるなら UML、実際のデータベースになったら IE記法。ErdDocs が描くのは最後の場合で、貼り付けたスキーマからそのまま作図します。

教科書にない記号:破線

実際のダンプには外部キーがないことがよくあります。Rails や Django、Laravel のアプリはリレーションをアプリ側で守るので、データベースは何も宣言しません。そこで ErdDocs は、この場合のための記号を一つ加えます。実線はデータベースが宣言したリレーション、破線はカラム名(user_id → users)から推定したリレーションです。前者は制約、後者は根拠のある推測です。

破線:ダンプに FOREIGN KEY がなく、命名規則から引いた線。usersposts
破線:ダンプに FOREIGN KEY がなく、命名規則から引いた線。

実際のスキーマで見る

下のツールに SQL を貼り付けると、外部キーと一意制約から、すべての線の「多」の側に鳥の足を描きます。

スキーマ

よくある質問

鳥の足の記号は何を意味しますか?

線の端に記号が二つまで重なります。テーブルに近い方が最大で、縦線は「最大 1」、三本に分かれた鳥の足は「多」です。外側が最小で、縦線は「少なくとも 1」、丸は「0 でもよい」。丸+鳥の足は「0 以上」、縦線+縦線は「ちょうど 1」と読みます。

Chen 記法と IE記法、どちらを使うべきですか?

教育や概念設計なら Chen。ひし形でリレーションを独立して描けるので、授業に向いています。実際のデータベースなら IE記法。テーブルごとに 1 つの箱にカラムを並べる形が、スキーマそのものの形だからです。

多対多の記号は?

線の両端に鳥の足を描きます。物理的なスキーマでは、多対多は中間テーブル(orders と products の間の order_items)で実装されます。そのため実際のデータベースを描くツールでは、中間テーブルに 2 本の一対多の線が集まる形になります。

データベースのツールが Chen 記法のひし形や楕円を描かないのはなぜですか?

物理的なデータベースでは、Chen 記法が別々に描くものがテーブルとカラムにまとまってしまうからです。属性の楕円は、テーブルの箱の中の 1 行になります。リレーションのひし形は、外部キーのカラムか中間テーブルのどちらかになります。これらを別の図形として描くと、図の大きさは倍になるのに、読み取れることは何も増えません。

関連ページ

  • ER図:エンティティ、リレーション、そして概念モデルがテーブルに変わるところ。
  • IE記法(鳥の足):読み方の規則を、例とともに。
  • ER図のカーディナリティ:実際のデータベースから、線にどの記号がつくかがどう決まるか。
  • ER図のサンプル:完全なスキーマ 14 件。それぞれ ER図とテーブル定義書つき。