エンティティとその関連を図記号で表現したデータベース設計図。
E-R図(Entity-Relationship Diagram、実体関連図)とは、管理したい「もの・人・出来事」(エンティティ=実体)と、それらの間の「関わり」(リレーションシップ=関連)を図記号で表したデータベースの設計図のことです。
身近な例で考えると、家を建てる前の間取り図に似ています。いきなり柱を立てるのではなく、まず「どの部屋とどの部屋がつながるか」を図にしますよね。データベースも同じで、いきなり表を作るのではなく、E-R図で「どんなデータを、どう結ぶか」を先に描いてから設計します。
上のツールで▶ボタンを押すと、白紙のキャンバスにエンティティを置き、属性・主キー・関連・多重度を順に加えて、1枚のE-R図が完成していく流れを確認できます。
E-R図にはいくつかの記法(書き方の流儀)がありますが、基本となる図記号は共通です。代表的なルールは次のとおりです。
・四角形=エンティティ:顧客・商品・注文など、データとして記録したい対象を表す
・ひし形=リレーションシップ:エンティティ同士のつながり(関連)を表し、中に関連名を書く
・楕円=属性:エンティティが持つ項目(氏名・金額など)を表す
・下線=主キー:1件を区別できる属性には下線を引く
・線の両端の数字=多重度:「1」「多」などで対応関係を示す
なお、実務でよく使われるIE記法(鳥の足記法)では、関連をひし形ではなく線そのもので表し、線の先を「鳥の足(< のような形)」にして「多」を示します。記法は違っても「実体と関連を図で表す」という目的は同じです。
多重度(カーディナリティ)とは、2つのエンティティが「何件対何件」で関連しているかを示す情報です。E-R図ではリレーションシップの線の両端に書きます。
多重度には大きく3種類あります。
・1対1:一方の1件が、もう一方の1件にしか対応しない(例:社員1人 ↔ 社員証1枚)
・1対多:一方の1件が、もう一方の複数件に対応する(例:顧客1人 → 注文は複数)
・多対多:どちらの1件も、もう一方の複数件に対応する(例:学生は複数の授業を受講し、授業にも複数の学生が参加)
なぜ多重度が重要か。多重度によって、後でテーブルに変換するときの構造が変わります。特に多対多の関連はそのままテーブルにできません。「学生と授業」の多対多は、「受講」という中間テーブルを追加し、学生IDと授業IDの組み合わせで表現します。E-R図の段階で多重度を明らかにしておくことで、こういった設計上の課題を早めに発見できます。
| E-R図の要素 | 記号 | テーブルへの変換 |
|---|---|---|
| エンティティ | 四角形 | → テーブル(表)1つ |
| 属性 | 楕円 | → 列(カラム) |
| 主キー属性 | 下線付き楕円 | → 主キー列(NOT NULL・UNIQUE) |
| 1対多の関連 | ひし形+線 | →「多」側のテーブルに外部キー列を追加 |
| 多対多の関連 | ひし形+線+多対多 | → 中間テーブルを新たに作成 |
なぜE-R図からテーブルへの変換ルールを知っておくのか。E-R図はあくまでデータの関係を「人間が読みやすい形」で表した設計図です。実際にデータベースソフトに入力するには、上の表のルールに従って「テーブル(表)の集合」へ変換する必要があります。
特に覚えておきたいのは多対多の関連の扱いです。「学生と授業」の関係をそのままテーブルにしようとすると、1つのセルに複数の値(授業ID)を入れる必要が出てしまいます。これは正規化のルールに違反します。そこで「受講」という中間テーブルを作り、「学生ID・授業ID・受講日」などをセットで1行として持たせます。この変換パターンは非常によく出てくるので、図で確認しながらイメージをつかんでおきましょう。
E-R図は、頭の中のあいまいな要件を、誰が見ても同じ意味になる「共通の設計図」に変える道具です。利用者・設計者・開発者が同じ図を見て話せるので、認識のズレを防げます。
実際の設計では、E-R図から関係データベースの表へ次のように落とし込みます。
・エンティティ → 表(テーブル):1つのエンティティが1つの表になる
・属性 → 列(カラム):属性が表の列になる
・主キー → 主キー列:下線を引いた属性がそのまま主キーになる
・1対多の関連 → 外部キー:「多」側の表に「1」側の主キーを外部キーとして持たせて結ぶ
このように、E-R図は「業務の理解」と「実際の表の設計」をつなぐ橋渡し役です。先に図でしっかり整理しておくことで、後から「列が足りない」「表のつなぎ方を間違えた」といった作り直しを減らせます。