基礎ER図

参加制約 (必須参加 / 任意参加) とは

定義

参加制約 (optionality) とは、ER モデルにおいて関連の各エンティティ側が関連に必ず参加するか (必須参加) 参加しないことも許されるか (任意参加) を規定する、最小基数についての制約である。

まず身近な例で: 「0 人の部署」と「配属前の新入社員」を認めるか

参加制約 (optionality) を理解する一番簡単な問いは、以下の 2 つ:

  • この会社は、所属する社員が 0 人の部署(新設したばかりで人事異動を待っている部署)の存在を認めますか?
  • この会社は、どの部署にもまだ所属していない新入社員(配属前の内定者)をシステムに登録できますか?

「0 個も許容する」= 任意参加、「必ず 1 個以上」= 必須参加。 つまり参加制約は「相手が最低 何個 必要か」の指定で、カーディナリティ が「最大基数」なら 参加制約は 最小基数。両方セットで初めて関連の意味が完成する。

ER 図での参加制約の記号

IE 記法 (crow's foot) では、線の端の記号で表す:

  • 縦棒 (|) — 必ず 1 (必須参加)
  • 円 (○) — 0 も許容 (任意参加)
必須参加 (社員は必ずどこかの部署に所属)
社員社員ID (PK)氏名部署ID部署部署ID (PK)部署名

部署側 = 縦棒 (必ず 1 部署に所属)、社員側 = 縦棒 + 鳥足 (部署は必ず 1 人以上の社員を持つ)。

任意参加 (0 人の部署、部署なしの社員を許容)
社員社員ID (PK)氏名部署ID部署部署ID (PK)部署名

両端の記号のうち「線側寄り」に ○ が含まれる (部署側は |○、社員側は ○ 鳥足)。この ○ が最小 0 を意味する。部署なしの内定者、社員 0 人の新設部署、どちらも許容する構造。

試してみる: 円 (○) と縦棒 (|) の切り替えで業務ルールがどう変わるか

カーディナリティ ページ と同じ 3 シナリオを、今度は 下限側の記号 (○ vs |) のみ 切り替えられる形で用意した。 上限側の記号 (鳥足の有無) は各シナリオの業務仕様に合わせて固定してある。 「0 個も許すのか、必ず 1 個以上必要か」の差が、現実世界のどのルールに直結しているかを試してほしい。

問 1: 顧客 と 注文

EC サイトの顧客と注文。上限は「1 顧客に複数注文 / 1 注文に 1 顧客」で固定してある (前ページで扱った軸)。ここで動かせるのは各側の「下限 = 0 個も許すか、必ず 1 個以上か」だけ。参加制約 (円 vs 縦棒) を切り替えて業務ルールがどう変わるかを試せる。

顧客 — 発注 — 注文
発注顧客顧客ID (PK)氏名注文注文ID (PK)注文日顧客ID
顧客
注文

この図が現実世界で語っているルール — 各行、成立する (O) か成立しない (X) か答えよう

  • 注文したことがない顧客も登録してよい未回答
  • どの顧客にも紐付かない注文が登録できる未回答

問 2: 学生 と 履修科目

大学の履修モデル。上限は両側 N (多対多) で固定。動かせるのは「0 科目でも学生 OK か」「履修者 0 の科目を許すか」の下限だけ。

学生 — 履修 — 科目
履修学生学籍番号 (PK)氏名科目科目ID (PK)科目名
学生
科目

この図が現実世界で語っているルール — 各行、成立する (O) か成立しない (X) か答えよう

  • 1 科目も履修していない学生が存在してよい未回答
  • 履修者が 0 人の科目が存在してよい未回答

問 3: 社員 と 部署

会社の所属モデル。上限は「社員は 1 部署に所属」「部署に複数社員」で固定 (前ページで扱った軸)。動かせるのは「配属前の社員 OK か」「無人部署 OK か」の下限だけ。

社員 — 所属 — 部署
所属社員社員ID (PK)氏名部署ID部署部署ID (PK)部署名
社員
部署

この図が現実世界で語っているルール — 各行、成立する (O) か成立しない (X) か答えよう

  • どこの部署にも所属していない社員 (配属前の内定者) を登録してよい未回答
  • 所属社員が 0 人の部署 (新設直後) が存在してよい未回答

参加制約を DB 上で表現する: FK 制約

参加制約は ER モデル層 の設計仕様であって、そのままでは DB は何も強制してくれない。 これを実装層で担保する主な手段が FK 制約 (外部参照制約)。 FK 列の NOT NULL / NULL 許可 の使い分けで、参加制約を DB のスキーマに落とし込む:

  • 必須参加 → FK 列を NOT NULL にする (相手を必ず持たせる)
  • 任意参加 → FK 列を NULL 許可 にする (相手を持たない状態を許す)

ただし FK 制約が保証するのは「参照した先が存在すること」だけで、「必ず参照すること」まで踏み込まない。 任意参加は NULL 許可 だけで足りるが、必須参加を厳密に強制したければ NOT NULL + 挿入時トリガや業務ルールのバリデーションを追加する必要がある。 「参加制約 = 設計」「FK 制約 = 実装」と考え、後者は前者を DB に翻訳する道具、と押さえておくと混乱しない。

変なER図 との対応: 違和感 #9 参加制約の矛盾

架空 EC サイト運営システム ER 図
発注確定購入階層所属明細9P対象配送先配送先ID (PK)郵便番号住所カテゴリカテゴリID (PK)名称サブカテゴリID商品商品ID (PK)商品名価格カテゴリID顧客顧客ID (PK)氏名注文履歴JSONカート内商品ID配列レビュー全て血液型注文注文ID (PK)注文日顧客IDレビューレビューID (PK)評価本文サブカテゴリサブカテゴリID (PK)名称親カテゴリID注文明細明細ID (PK)商品名数量

変なER図 の「注文 —明細— 注文明細」の線を注意深く見ると、注文側|○ (最大 1、最小 0)注文明細側1..N (最大 N、最小 1) が並んでいる。 IE 記法として厳密に読むと:

  • 注文明細側から: 「1 つの注文は明細を 1 件以上 必ず持つ」(必須参加)
  • 注文側から: 「1 つの明細は親の注文を 0 or 1 個しか持たない」(任意参加、注文なしでも存在可)

この 2 つは 存在論的に両立しない。 「注文には明細が必ず 1 件以上ある」なら、その明細を逆から見れば必ず親の注文を持つ (= 最小 1) はず。 参加制約は片側だけで決まらず、両側の最小基数が整合していないと関連そのものが破綻する。

さらにこの線は 識別関係(弱エンティティを親に繋ぐ関連) なので、 「弱エンティティは親なしでは存在できない」という定義と親側 min=0 が真っ向から衝突する。 参加制約の矛盾は、関連の意味と組み合わさると設計そのものを崩壊させる。

よくある疑問

Q.参加制約と外部参照制約 (FK 制約) は同じですか?
A.同じではなく、FK 制約は参加制約を DB 上で表現する主な手段です。参加制約は ER モデル層の設計仕様で、FK 列を NOT NULL にすれば必須参加、NULL 許可にすれば任意参加が実装できます。「設計 → 実装への翻訳」の関係です。
Q.必須参加を強制するには実装上どうすればいい?
A.FK 列を NOT NULL にし、かつ挿入時トリガや業務ルールで「親レコードなしに子レコードを作らない」を保証する。あるいは親側で「子が 0 件の場合の状態」を明示的に持たせる。
Q.「0 対 N」と「1 対 N」の違いは何ですか?
A.「0 対 N」は任意参加 (相手側が 0 個の状態を許容)、「1 対 N」は必須参加 (相手側は最低 1 個必要)。カーディナリティの最大側が同じ「N」でも、最小側が違うと運用上の意味が大きく変わります。

関連トピック

もっと学びたい方へ(おすすめ書籍)

おすすめ
達人に学ぶDB設計徹底指南書 第2版
ミック

テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。

Amazon で見る →
おすすめ
楽々ERDレッスン (CodeZine BOOKS)
羽生章洋

ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。

Amazon で見る →
情報処理教科書 データベーススペシャリスト 2025年版
三好康之

IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。

Amazon で見る →
達人に学ぶSQL徹底指南書 第2版
ミック

SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。

Amazon で見る →
SQLアンチパターン 第2版
Bill Karwin

実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。

Amazon で見る →
[改訂3版]内部構造から学ぶPostgreSQL
勝俣智成 ほか

PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。

Amazon で見る →
理論から学ぶデータベース実践入門
奥野幹也

リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。

Amazon で見る →

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講