ER図を見たとき「この線の端についている記号は何を意味するのだろう」と疑問に感じた経験はないでしょうか。
ER図には独自の記号と線の種類があり、それぞれがエンティティ間の関係性・件数の制約・必須かどうかを表しています。
記号の意味を正しく理解していないと、ER図を読み間違えてしまい、データベース設計に支障をきたすことにもなりかねません。
この記事では、ER図に登場する記号と線の種類・意味・読み方を、IE記法とUML記法それぞれについて図を使ってわかりやすく解説していきます。
ER図の記号はカーディナリティと参加制約を表している
それではまず、ER図の記号が何を意味しているかという結論から解説していきます。
ER図の線の端に付いている記号は、大きく分けて「カーディナリティ(多重度)」と「参加制約(必須か任意か)」の2つの情報を表しています。
ER図の記号が表す2つの情報
・カーディナリティ → 「1件か多件か」という件数の比率を示す(1対1・1対多・多対多)
・参加制約 → 「必ず存在するか(必須)・存在しなくてもよいか(任意)」を示す(0か1か)
この2つの情報を組み合わせることで「1人の顧客は0件以上の注文を持つ」「1件の注文には必ず1人の顧客が存在する」といった細かい制約を表現できます。
記号を正確に読み解くことで、データベースのビジネスルールをER図から正確に読み取ることができるでしょう。
| 記号 | 意味 | 種別 |
|---|---|---|
| | | 1(必ず1件) | カーディナリティ |
| 〇 | 0(0件もあり得る・任意) | 参加制約 |
| <(鳥の足) | 多(複数件) | カーディナリティ |
| || | 必ず1件(最小1・最大1) | 組み合わせ |
| 〇| | 0または1件(最小0・最大1) | 組み合わせ |
| |< | 1件以上(最小1・最大多) | 組み合わせ |
| 〇< | 0件以上(最小0・最大多) | 組み合わせ |
カーディナリティとは何か
カーディナリティとは、エンティティ間のリレーションにおける「件数の比率」を指す用語です。
「1対1」「1対多」「多対多」という分類がカーディナリティの種類にあたります。
ER図の線の端の記号を読むことで、2つのエンティティがどのような件数の関係にあるかを把握することができます。
カーディナリティはデータベース設計において最も基本的かつ重要な概念のひとつでしょう。
参加制約(最小カーディナリティ)とは何か
参加制約とは「最低何件存在しなければならないか」を示す制約です。
「0」であれば存在しなくてもよい(任意・オプショナル)、「1」であれば必ず存在しなければならない(必須・マンダトリー)を意味します。
たとえば「注文が0件でも顧客として登録できる」場合は参加制約が「0」、「注文には必ず1人の顧客が紐づく」場合は「1」となります。
参加制約を正しく設定することで、ビジネスルールをER図に忠実に反映させることができるでしょう。
線の読み方の基本ルール
ER図の線を読む際の基本ルールは「エンティティに近い側の記号から読む」ことです。
線の両端それぞれに記号があり、左端はAからBへの関係、右端はBからAへの関係を示しています。
「顧客|―〇<注文」という線であれば、左側(顧客側)の「|」は「注文から見た顧客の件数は必ず1件」、右側(注文側)の「〇<」は「顧客から見た注文の件数は0件以上」と読みます。
IE記法の記号と読み方を詳しく解説
続いては、IE記法の各記号の組み合わせパターンと具体的な読み方を確認していきましょう。
IE記法は現場で最もよく使われる記法であり、しっかりマスターしておきたいところです。
「||」(縦線2本)の意味と読み方
縦線2本(||)は「必ず1件」を意味する記号です。
最小カーディナリティが1(必須)・最大カーディナリティが1(1件のみ)であることを示しています。
使用例
社員 ||―|| 社員証
読み方:「1人の社員は必ず1枚の社員証を持ち、1枚の社員証は必ず1人の社員に紐づく」
→ 1対1の必須リレーション
〇
≪
|
≪
≫
〇
≪
||
「〇<」(丸+鳥の足)の意味と読み方
丸+鳥の足(〇<)は「0件以上(ゼロまたは多)」を意味する記号です。
最小カーディナリティが0(任意)・最大カーディナリティが多(複数件)であることを示しています。
「顧客は注文を持たないこともあるが、持つ場合は複数件になることもある」というような状況を表現するのに使います。
実務のER図で最もよく登場する記号の組み合わせのひとつといえるでしょう。
「|<」(縦線+鳥の足)の意味と読み方
縦線+鳥の足(|<)は「1件以上(必ず多)」を意味する記号です。
最小カーディナリティが1(必須)・最大カーディナリティが多(複数件)であることを示しています。
「注文には必ず1件以上の注文明細が存在する」といったビジネスルールを表す場合に使います。
UML記法の記号と読み方を解説
続いては、UML記法における記号の種類と読み方を確認していきましょう。
UML記法はIE記法と異なる表現方法を使いますが、意味するカーディナリティの概念は同じです。
UML記法の数値表記の読み方
UML記法ではカーディナリティを線の端に数値やアスタリスク(*)で直接記述します。
「最小値..最大値」という形式で表記し、最大値に上限がない場合は「*」を使います。
| UML記法 | 意味 | IE記法との対応 |
|---|---|---|
| 1 | 必ず1件 | || |
| 0..1 | 0件または1件 | 〇| |
| 1..* | 1件以上(必ず多) | |< |
| 0..* または * | 0件以上(任意・多) | 〇< |
| n..m | n件以上m件以下 | IE記法では表現が難しい |
UML記法の最大の利点は「2..5」のように具体的な件数の上限・下限を細かく指定できる点です。
IE記法では「多」としかいえない部分も、UML記法であれば正確な件数制約を表現できるでしょう。
UML記法の線の種類
UML記法では線の種類自体にも意味があります。
実線はクラス間の関連(association)を示し、菱形付きの実線は集約(aggregation)や合成(composition)を示します。
ER図で最もよく使うのは実線の関連ですが、システムの設計レベルによって適切な線の種類を選ぶ必要があります。
〇≪
|≪
0..*
1..*
IE記法とUML記法の使い分け
IE記法とUML記法のどちらを使うべきかは、チームやプロジェクトの慣習によります。
直感的に記号の形で関係を把握したい場合はIE記法、数値で厳密に件数を表現したい場合はUML記法が向いています。
重要なのはプロジェクト内で記法を統一することです。
記法が混在していると読み間違いのリスクが高まるため、チームで事前にどちらを使うか決めておくことが大切でしょう。
実際のER図での記号の読み方・読み解き方
続いては、実際のER図を想定した記号の読み方の練習と、よくある読み間違いについて確認していきましょう。
記号の意味を覚えた後は、実際に読む練習をすることで理解が深まります。
ER図を読む手順
ER図を読む際は以下の手順で確認すると整理しやすくなります。
ER図の読み方の手順
1. まず2つのエンティティ名を確認する
2. 線の左端(Aエンティティ側)の記号を読む → 「BからAを見たときの件数制約」
3. 線の右端(Bエンティティ側)の記号を読む → 「AからBを見たときの件数制約」
4. 両端の記号を組み合わせてリレーションを文章で表現する
この手順を意識することで、複雑なER図でも順序立てて読み解くことができるでしょう。
〇
≪
「1つの部署には0人以上の社員が所属する(社員が0人の部署も存在できる)」
「1人の社員は必ず1つの部署に所属する(部署なしの社員は登録できない)」
よくある読み間違いと注意点
ER図の記号でよくある読み間違いとして「記号を読む方向を逆にしてしまう」ことが挙げられます。
線の端の記号は「相手側から自分を見たときの件数」を示しているという点を意識することが重要です。
たとえば「注文」側の端についている記号は「顧客から注文を見たときの件数制約」を意味します。
向きを間違えると正反対の意味に読み違えてしまうため、最初のうちは「〇〇から△△を見ると…」と声に出して確認しながら読むと間違いが減るでしょう。
記号を使ったビジネスルールの表現
ER図の記号はデータベースの技術的な制約だけでなく、ビジネス上のルールを表現するものでもあります。
「注文には必ず1件以上の注文明細が必要」というビジネスルールは「|<」で表現し、「顧客はまだ注文していなくてもシステムに登録できる」というルールは「〇<」で表現します。
記号の選択はシステムの仕様や業務要件を正確に反映させる必要があるため、ER図を作成する際は業務担当者との認識合わせが非常に重要です。
まとめ
この記事では、ER図の記号と線の意味・種類・読み方について、IE記法とUML記法それぞれの観点から解説しました。
ER図の記号はカーディナリティ(件数の比率)と参加制約(必須か任意か)の2つの情報を組み合わせて表現しています。
IE記法では「|」「〇」「<(鳥の足)」を組み合わせ、UML記法では「1」「0..1」「1..*」「0..*」などの数値表記を使います。
記号を読む際は「相手側から自分を見たときの件数制約」という視点を意識することで、読み間違いを防ぐことができるでしょう。
ER図の記号を正確に読み解く力は、データベース設計の品質を高めるうえで欠かせないスキルです。