it

ER図の1対多・多対多とは?リレーションの種類を解説!(カーディナリティ・多重度・外部キー・FK・複合キーなど)

当サイトでは記事内に広告を含みます

 

ER図を学ぶうえで「1対多」「多対多」という言葉は必ずといっていいほど登場します。

しかし「なんとなく意味はわかるけれど、実際にER図でどう表現するのかわからない」という方も多いのではないでしょうか。

リレーションの種類を正しく理解することは、データベース設計の精度を高めるうえで欠かせない知識です。

この記事では、ER図における1対1・1対多・多対多のリレーションの意味から、カーディナリティ・多重度・外部キー・複合キーの概念まで、図を使ってわかりやすく解説します。

ER図のリレーションは「1対1」「1対多」「多対多」の3種類が基本

それではまず、ER図におけるリレーションの種類という結論から解説していきます。

エンティティ同士の関係性を表すリレーションには、「1対1(1:1)」「1対多(1:N)」「多対多(M:N)」の3種類があります。

この関係性のことを「カーディナリティ(多重度)」と呼び、ER図では線の端の記号によって表現されます。

リレーションの3種類まとめ

・1対1(1:1) → 一方の1件に対して、もう一方も必ず1件対応する

・1対多(1:N) → 一方の1件に対して、もう一方は複数件対応する

・多対多(M:N) → 両方のエンティティが互いに複数件対応する

どのリレーションを設定するかは、業務上のルールやデータの実態に基づいて決定します。

正しいリレーションを設定しないと、データの整合性が保てなくなる可能性があるでしょう。

1対1(1:1)リレーションとは

1対1のリレーションとは、一方のエンティティの1件に対して、もう一方のエンティティも必ず1件だけ対応する関係です。

たとえば「社員」と「社員証」の関係が典型的な例といえます。

1人の社員に対して1枚の社員証が発行され、1枚の社員証は1人の社員にしか紐づきません。

1対1のリレーションは比較的まれな関係で、セキュリティ上の理由や管理上の都合でテーブルを分けるときに使われることが多いでしょう。

1対多(1:N)リレーションとは

1対多のリレーションとは、一方のエンティティの1件に対して、もう一方のエンティティが複数件対応する関係です。

データベース設計で最もよく登場するリレーションであり、「1対多」を正しく理解することがER図習得の核心といえます。

代表的な例として、「1人の顧客が複数の注文をする」「1つの部署に複数の社員が所属する」などが挙げられます。

1対多のリレーションでは、「多」側のテーブルに「1」側のテーブルの主キーを外部キー(FK)として持たせる設計になります。

多対多(M:N)リレーションとは

多対多のリレーションとは、両方のエンティティが互いに複数件の関係を持つパターンです。

「1つの注文に複数の商品が含まれ、1つの商品は複数の注文に含まれる」という関係が典型的な例です。

多対多のリレーションは、そのままデータベースで実現できないため、中間テーブルを作成して解消するのが一般的です。

この中間テーブルを「関連テーブル」や「ブリッジテーブル」と呼ぶこともあります。

カーディナリティと多重度の表現方法

続いては、カーディナリティ(多重度)の具体的な表現方法を確認していきましょう。

カーディナリティはER図の読み取りにおいて最も重要な要素のひとつです。

IE記法でのカーディナリティ表現

IE記法ではリレーションの線の端に記号を組み合わせてカーディナリティを表現します。

記号の読み方は「エンティティに近い側の記号から読む」のが基本です。

記号の組み合わせ 意味 読み方の例
||(縦線2本) 必ず1件(1のみ) 必ず1件対応する
○|(丸+縦線) 0または1件 対応しないこともある
|≪(縦線+鳥足) 1件以上(必ず多) 必ず1件以上存在する
○≪(丸+鳥足) 0件以上(0または多) 0件でも複数件でもよい

実際のER図では、左右それぞれの端に記号が付くため、両端を合わせて読むことでリレーションの全体像が把握できます。

UML記法での多重度表現

UML記法では数値やアスタリスク(*)を使って多重度を表現します。

「0..1」は「0件または1件」、「1..*」は「1件以上」を意味します。

UML記法は数値で明確に件数の範囲を示せるため、複雑な条件を表現する場合に便利です。

どちらの記法を使うかはツールやチームの慣習によりますが、記法を統一して使うことが大切でしょう。

カーディナリティの読み方(IE記法)
部署

||

○≪

必ず1件
0以上
社員
「1つの部署には0人以上の社員が所属し、1人の社員は必ず1つの部署に属する」

最小・最大カーディナリティの考え方

カーディナリティには「最小値」と「最大値」の2つの観点があります。

最小カーディナリティは「最低何件存在するか(0か1か)」を示し、最大カーディナリティは「最大何件存在するか(1か多か)」を示します。

たとえば「0..1」であれば「最小0件・最大1件」、「1..*」であれば「最小1件・最大多件」という意味になります。

この2軸を意識することで、より正確にリレーションの制約を表現できるでしょう。

多対多を中間テーブルで解消する方法と外部キー・複合キーの役割

続いては、多対多リレーションの解消方法と、外部キー・複合キーの役割について確認していきましょう。

多対多はそのままデータベースに実装できないため、設計上の工夫が必要です。

中間テーブルで多対多を解消する

多対多のリレーションを解消するには、2つのエンティティの間に「中間テーブル」を挿入します。

「商品」と「注文」の多対多関係であれば、「注文明細」という中間テーブルを作成することで解消できます。

多対多の解消例

変更前:商品(多)←→(多)注文

変更後:商品(1)← 注文明細(多)→(1)注文

中間テーブル「注文明細」には「商品ID(FK)」と「注文ID(FK)」の両方を持たせる

中間テーブルを挿入することで、多対多が「1対多」と「多対1」の組み合わせに変換され、データベースで正しく実装できるようになります。

中間テーブルによる多対多の解消
注文
注文ID(PK)
注文日

1

注文明細
注文ID(FK)
商品ID(FK)
数量

1

商品
商品ID(PK)
商品名
中間テーブル「注文明細」が両エンティティを1対多でつなぐ

外部キー(FK)がリレーションを実現する仕組み

外部キーとは、別のテーブルの主キーを参照するための列です。

中間テーブルには両エンティティの主キーを外部キーとして持たせることで、データのつながりを管理します。

外部キーを設定することで、参照先に存在しないIDを登録しようとするとエラーになる「参照整合性」が働くようになります。

これによりデータの一貫性と整合性が自動的に守られる仕組みです。

複合キーとは何か

複合キーとは、複数の列を組み合わせて主キーとして扱う設計手法です。

中間テーブルでは「注文ID+商品ID」の組み合わせで1レコードを一意に識別することが多く、これが複合キーにあたります。

単独の列では一意性を保てない場合に、複数列の組み合わせで主キーを構成するのが複合キーの基本的な使い方です。

キーの種類 説明 使う場面
主キー(PK) レコードを一意に識別する列 すべてのテーブルに設定する
外部キー(FK) 他テーブルの主キーを参照する列 リレーションがあるテーブルに設定する
複合キー 複数列の組み合わせで主キーとする 中間テーブルなどで使用する

1対多・多対多の具体的な設計例

続いては、実際のシステムを想定した設計例で1対多・多対多のリレーションを確認していきましょう。

具体的なイメージを持つことで、より実践的な理解につながります。

ECサイトのデータベース設計例

ECサイトのデータベースを例に、各リレーションがどのように登場するかを見てみましょう。

「顧客」「注文」「商品」「注文明細」という4つのエンティティを使った設計が典型的なパターンです。

ECサイトのリレーション例

・顧客 1対多 注文 → 1人の顧客は複数の注文をする

・注文 多対多 商品 → 中間テーブル「注文明細」で解消

・注文 1対多 注文明細 → 1件の注文に複数の明細行がある

・商品 1対多 注文明細 → 1つの商品が複数の明細に含まれる

ECサイトのER図(簡易版)
顧客
顧客ID (PK)
氏名

注文
注文ID (PK)
顧客ID (FK)
注文日

注文明細
注文ID (FK)
商品ID (FK)
数量

商品
商品ID (PK)
商品名
価格
注文明細が中間テーブルとなり商品と注文の多対多を解消している

社員管理システムの設計例

社員管理システムの場合、「部署」と「社員」は1対多の関係になります。

「1つの部署に複数の社員が所属し、1人の社員は必ず1つの部署に属する」というルールをER図で表現するのが基本パターンです。

一方、「社員」と「プロジェクト」の関係は多対多になることが多く、「アサイン」などの中間テーブルを使って解消する設計が一般的でしょう。

リレーション設計のよくある間違い

リレーション設計でよく起きる間違いとして、「多対多のまま実装しようとする」「外部キーをどちらのテーブルに持たせるか迷う」などが挙げられます。

外部キーは必ず「多」側のテーブルに持たせるのが基本ルールです。

「1対多」であれば「多」側のテーブルに「1」側の主キーを外部キーとして追加する、という原則を覚えておけば迷わずに済むでしょう。

まとめ

この記事では、ER図における1対1・1対多・多対多のリレーションの意味と、カーディナリティ・外部キー・複合キーの役割について解説しました。

リレーションには「1対1」「1対多」「多対多」の3種類があり、それぞれIE記法の記号で表現します。

多対多のリレーションはそのままでは実装できないため、中間テーブルを挿入して「1対多×2」に変換するのが基本の設計手法です。

外部キーは「多」側のテーブルに持たせ、複合キーは中間テーブルなど複数列で一意性を保ちたい場合に使います。

リレーションの種類を正しく理解することで、設計ミスの少ない堅牢なデータベース構築につながるでしょう。