ICT STUDY GUIDE試験情報・勉強法SG

SGの主キー・外部キーの違い|部署と社員で参照整合性を図解

情報セキュリティマネジメントの関係データベース学習を補う独自ケース。主キーの一意性、外部キーの重複、NULL、部署名の変更と参照先削除を図解し、制約で守れること・守れないことを確認表で整理します。

最終更新
読了目安
約8分
執筆
ICT模試 編集部
まず結論

この記事の要点

  • 主キーは表の行を識別し、外部キーは参照先との対応を制約します。同じ役割ではありません。
  • 外部キーの値は複数の行で重複できます。主キーが複数列の組合せになる場合もあります。
  • 参照先を消したときの扱いは設定で異なります。存在する参照先を選べたことと、業務上正しい所属であることも別です。

関係データベースを、行の識別と表同士の対応から理解する

現行SGシラバスVer.4.1のデータベース分野には、関係データベース、DBMS、データ重複の排除、SQLなどが挙がっています。本記事は、その学習の前提になる「どの行を指すか」「別の表のどの行と対応するか」を具体化する解説です。主キー・外部キーの全ての仕様がシラバスの用語例に列挙されている、又は必ずこの形で出題される、という説明ではありません。

例に使う部署・社員・識別子は全て当サイト独自の架空データです。実在の利用者や企業、公式問題・過去問の再現ではありません。PostgreSQL 18の公式資料を参照し、関係の読み方と制約の効果を説明しますが、実DBを作成・更新・削除する操作手順ではありません。

学習では、同じ行を特定する仕組みと、複数の行が同じ部署を参照する仕組みを区別します。「キー」という名前が付けば全て重複禁止、主キーは必ず数字一列、外部キーは別の表の主キーだけを参照する、といった一律の暗記は避けます。

複数の表や受付元を分析へつなぐ学習はSGのデータウェアハウス・ETLで、行の対応に加えて、集計の単位と対象範囲をそろえる独自ケースを確認できます。

部署と社員の資料を対応する目印で照合する場面
一意に識別する項目と、別の表を参照する項目を本文の表で区別します。

架空ケース:部署は二つ、社員は三人

部署表には、部署ID D10・部署名「総務」と、部署ID D20・部署名「営業」の二行があります。部署IDを主キーとします。社員表には社員IDと所属部署IDを持たせ、社員IDを主キー、所属部署IDを部署表の部署IDへの外部キーとします。このケースでは、所属を必須として所属部署IDへNOT NULLも設定する条件です。

社員E01とE02はD10、社員E03はD20を参照します。同じ部署に複数の社員がいるため、社員表の所属部署IDにD10が二回現れても、この設計では誤りではありません。重複してはいけない社員IDと、複数行が同じ値を使う所属部署IDを混同しないようにします。

名前で識別すると、同名の人や名称の変更で扱いに迷うことがあります。この例はIDで行を識別し、部署名は部署表で持ちます。ただし、IDを採用したことだけで重複や誤参照が防げるわけではありません。識別と参照の制約を、実際に設定して守ることが前提です。

社員の三行から、部署表の二行を参照する

部署表

D10:総務/D20:営業。部署IDで行を識別。

  • 社員E01 → D10

    部署表のD10の行に対応。

  • 社員E02 → D10

    E01と同じ部署を参照してよい。

  • 社員E03 → D20

    部署表のD20の行に対応。

  • 追加案E04 → D99

    D99の部署は存在しない。この条件の外部キー制約では拒否。

行を識別する社員IDと、参照先を示す所属部署IDを分けます。

当サイト独自の対応図。中央は部署表全体、各枠は社員の行又は追加案です。通信方向や処理順序を表すネットワーク構成図ではありません。

社員表の架空データ・部署表はD10=総務、D20=営業
社員ID(主キー)所属部署ID(外部キー・必須)参照する部署
E01D10総務
E02D10総務
E03D20営業

主キー:一つの制約が、複数列の組合せになる場合もある

主キーは、表の各行を一意に識別する列、又は列の組合せです。PostgreSQLの主キーは重複とNULLを許しません。社員E01がすでにある状態で、別の社員の行へ同じ社員ID E01を付けたり、社員IDをNULLにしたりする追加は、この主キー制約に反します。部署IDが正しくても、社員ID側の問題は別に残ります。

別の架空例として、研修への参加表で「研修IDと社員IDの組」を主キーにする設計を考えます。同じ研修に異なる社員が参加でき、同じ社員が異なる研修に参加できても、同じ研修と同じ社員の組合せは重複できません。二つの列を使う一つの主キーであり、主キーが二つあるという意味ではありません。

また、主キーにする列以外にも、一意であるべき値へ一意制約を設定できます。PostgreSQLでは外部キーの参照先に、条件を満たす一意な列・列の組合せも使えます。本記事は説明を単純にするため部署の主キーを参照していますが、外部キーの参照先は必ず主キーだけ、と一般化しないようにします。

外部キー:重複禁止でも、必須入力でも、内容の正しさの保証でもない

社員表へE04・D99を追加しようとしても、部署表にD99がなければ、本例の外部キー制約が拒否します。こうして、参照する行が存在しない対応を防ぐ考え方が参照整合性です。一方、E04・D20なら参照先は存在しますが、本当の所属が総務であれば業務上は誤登録です。存在確認と、内容の事実確認は別です。

NULLの扱いも区別します。本例の所属部署IDはNOT NULLなので、所属なしの行を登録できません。これとは別の設計としてNOT NULLを付けず、通常の一列の外部キー制約だけを使う場合、NULLは許されます。外部キーと必須入力は同じ制約ではありません。NULLを文字列「NULL」、空文字、数値0と同じ値として扱うものでもありません。

参照整合性を守っても、入力する人にその操作権限があることや、個人情報をその目的で利用してよいことまで保証されません。誰が登録・変更できるか、変更の根拠を誰が確認するかは、認証・権限や業務手順として別に管理します。DBの制約を、全ての安全管理や業務チェックの代わりにはしません。

部署名の変更と、部署行の削除は結果が違う

D10の部署名だけを「総務」から「管理」へ変え、IDはD10のままにする例を考えます。社員表がIDだけで所属を持つこの設計では、E01とE02の所属部署IDを変える必要はありません。部署表と対応付けて最新名を表示すれば「管理」になります。表示名の変更と、識別子の変更を同じものとして扱わないことが要点です。

D10の行そのものを削除する場合は、社員からの参照が残っています。PostgreSQLで削除時の動作をRESTRICTにしていれば、その参照先の削除は拒否されます。CASCADEにしていれば、参照する社員E01とE02の行も削除されます。外部キーがあれば自動で必ずどちらかの望ましい結果になる、とは考えません。

この比較は設定の結果を学ぶためのもので、社員情報の削除を推奨するものではありません。保存すべき記録や業務上の意味から、削除を認めるか、別の有効状態で管理するかも検討します。なお、既定のNO ACTIONとRESTRICTには制約の検査時点などの違いがあるため、完全な同義語としては扱いません。

同じD10に対しても、何を変えるかと設定で結果が変わる

部署名だけを変更

  • D10は残し、総務を管理へ
  • 社員E01・E02はD10のまま
  • 対応付けた最新の表示名が変わる

D10を削除・RESTRICT

  • D10への参照が残っている
  • 部署行の削除は拒否
  • この削除では社員の行も残る

D10を削除・CASCADE

  • 削除動作を連鎖する設定
  • 参照するE01・E02も削除
  • D20と社員E03はこの関係では残る

参照の関係だけでなく、変更する列・削除時の設定・業務上の意味を照合します。

各列は同じ初期データからの独立した架空例です。実DBの削除手順や推奨設定ではなく、他の関連表・制約がないという条件で比較しています。

表を読むときの、五つの確認欄

復習では、各表の主キーをまず囲み、外部キーからどの表のどの列へ対応するかを書きます。その後で、重複・NULL・参照先の存在を別々に確認します。表の見た目だけでキーを推定するのではなく、問題文や定義で何を制約としているかへ戻ることが重要です。

たとえば部署名を社員表にも複写していた場合は、最新名を対応付けて表示する本例とは更新の条件が変わります。別の表や履歴を勝手に補わず、与えられた列と関係だけで判断します。制約が満たされたことと、事実や目的に合う登録であることを分け、足りない条件は未確認として残してください。

主キーと参照整合性を読む五つの確認欄
観点確認する定義避ける取り違え
識別主キーの列又は列の組合せ複合主キーを複数の主キーと呼ぶ
対応参照元と参照先の表・列外部キーの重複を一律に誤りとする
NULL必須のNOT NULLもあるか外部キーだけで全て必須と考える
変更名称・ID・行削除と設定の違い削除時の連鎖を無条件に安全とする
業務所属の根拠・操作権限・保存の必要存在する部署なら内容も正しいとする

確定の単位・内部統制とつなぎ、SGを復習する

複数の表を更新する単位と同時実行の学習はSGのトランザクションと排他制御、業務へ組み込む確認の位置付けはSGの内部統制とIT統制へ。参照整合性、更新の確定単位、担当者の権限を一つの機能の名前として扱わないようにしましょう。

範囲はSGシラバス案内、文章の条件整理は科目Bの読み方で確認できます。登録不要の無料6問は学習画面の体験で、キーの理解を網羅的に診断するものではありません。SGの教材・料金で収録範囲と購入条件をご確認ください。

よくある質問

外部キーに同じ部署IDが二回あるのは間違いですか?

必ずしも間違いではありません。本文の社員表では、複数の社員が同じ部署を参照できます。参照元の外部キーにも別途一意制約があるかどうかで条件が変わります。

主キーは必ず一列のIDですか?

複数列の組合せを主キーにする場合もあります。一つの主キー制約が、列の組全体の一意性とNULLを許さない条件を表します。

外部キーがあれば、部署を消しても社員情報は必ず残りますか?

削除時の動作に依存します。RESTRICTなら参照が残る削除を拒否し、CASCADEなら参照する行も削除します。設定と、他の関係・保存すべき業務記録を確認する必要があります。

出典・参考

  1. [1]IPA:SGシラバスVer.4.1(本文8ページ・関係データベースとSQL。2026年10月17日確認)
  2. [2]PostgreSQL 18:Foreign Keys(参照整合性)
  3. [3]PostgreSQL 18:Constraints(主キー・外部キー・NULL・削除時の動作)

本番と同じペースで腕試し

記事の次は、本番形式の問題で。

各検定の出題カテゴリをもとに作った独自の無料お試しを、登録不要・カード不要で解けます。本番と同じ出題配分とは限りません。続きの模試と章別ドリルは買い切りで、月額はかかりません。

情報セキュリティマネジメント(SG)

60問・120分の模試と章別ドリル・4,980円(税込・買い切り)

SGの無料お試し6問
料金と収録内容を見る →

当サイトは、MCPC・全日本情報学習振興協会・IPAとは関係のない個人が運営する非公式の学習教材です。掲載している問題はすべて当サイトのオリジナルで、実際の試験問題・過去問題・再現問題ではありません。試験の日程・受検料・出題範囲・合格基準は各試験の公式サイト(モバイル・IoT:https://www.mcpc-jp.org/license/ 、サイバー管理士:https://www.joho-gakushu.or.jp/isme/ 、情報セキュリティマネジメント(SG):https://www.ipa.go.jp/shiken/kubun/sg.html )で必ず確認してください。教材内の正答率や学習の目安は、本番の評価点や公式の合格基準とは異なります。合格を保証するものではありません。技術・制度の記述は「最終確認日」時点のものです。

← 対策記事の一覧へ