戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2013年 春期 55


問題文

関係データベースを使い“社員”表と“部署”表を作成して社員情報を管理する。 “社員”表と“部署”表に、必要に応じて設定する主キーと外部キーの適切な組合せはどれか。ここで、社員は必ず“部署”表に存在する部署に所属するものとし、社員データの追加や更新をするときには、参照制約を利用して整合性を確保するものとする。
ITパスポート 2013年 春期  問55の問題画像ITパスポート 2013年 春期  問55の選択肢の画像

選択肢

(正解)

🔒 解説は解答すると表示されます

関係データベースの主キーと外部キーの設定【ITパスポート 解説】

正解の理由

今回の設問では、社員は必ず既存の部署に所属し、社員の追加・更新時に参照制約(referential integrity:外部キーによって参照先が存在することを保証するルール)で整合性を保つと明記されています。
まず用語をやさしく整理します。
  • 主キー(primary key):その表の各行(レコード)を一意に識別する列のこと。例えば社員を区別するための「社員コード」が該当します。
  • 外部キー(foreign key):他の表の主キーを参照する列のこと。参照先が存在するかをチェックして整合性を保ちます。
「社員は必ず部署表に存在する部署に所属する」という関係は「社員(多) — 部署(1)」の一対多です。この場合、多側(社員)に部署コードを持たせ、その列を外部キーにして部署表の部署コード(主キー)を参照します。
したがって、社員表の主キーは社員コード、部署表の主キーは部署コード、そして社員表の部署コードが外部キーである構成が正しいため、選択肢 が正解です。

解法ステップ

  1. 表の意味を確認する:社員表は個々の社員を管理、部署表は部署情報を管理。
  2. 各表で「各行を一意に識別する値」を探す:社員→社員コード、部署→部署コード。これらが主キー。
  3. リレーション(関係)を確認する:社員は必ず部署に所属 → 「社員(多)→部署(1)」。
  4. 多側に参照(外部キー)を置く:社員表に部署コードを持たせ、部署表の部署コードを参照(外部キー)にする。
  5. 問題文の「参照制約を利用して整合性を確保」に合致する選択肢を選ぶ。
これらの手順を順に追えば、正しい組合せを見つけられます。

選択肢別の誤答解説

  • ア:主キーは正しい(社員コード・部署コード)が設定されていますが、外部キーが「なし」になっています。参照制約で整合性を保つ条件に反します。社員が存在しない部署コードを持ったまま登録される可能性があるため不適切です。
  • イ:主キーは社員コード・部署コードで、外部キーが社員表の部署コードになっています。社員は部署表の部署コードを参照しているため、参照制約で整合性を保てます。これが正しい配置です(正答)。
  • ウ:部署表の部署コードを主キーにしている点は良いですが、外部キーとして「社員表の社員コード」と「社員表の部署コード」を指定しています。社員コードを外部キーにする意味がありません。外部キーは参照先(部署表)の主キーを参照する列であるべきで、ここでは逆になっているため誤りです。
  • エ:社員表の主キーが「社員の部署コード」になっています。これは同じ部署に属する複数社員がいる場合に主キーの一意性を満たせません(主キーは各社員を一意に識別できる必要がある)。また外部キーの指定も不適切です。

よくある誤解

  1. 「両方の表に外部キーが必要」だと思い込む誤り。リレーションの方向を考え、参照される側(ここでは部署)に外部キーは不要で、参照する側(社員)に外部キーを置きます。
  2. 「外部キーは必ずユニークでなければならない」と思う誤り。外部キーは参照先の主キーを指すため、参照先はユニークですが、外部キー側は同じ部署を複数の社員が参照するので重複してよい(ユニークである必要はない)。
  3. 「主キーと外部キーは同じもの」と混同する誤り。主キーはその表で行を一意にするための列、外部キーは別表の主キーを参照するための列で、役割が違います。

補足コラム

  • 一対多(1:N)の基本パターン:部署(1) ← 社員(N)。多側の表に参照(外部キー)を置くのが基本です。
  • 参照制約の運用例:部署が削除されたら所属社員をどうするか。データベースでは「DELETE CASCADE(削除連鎖)」「RESTRICT(制約違反で削除不可)」などの振る舞いを設定できます。多くの業務では、誤って部署を削除して社員データが孤立しないように制約を厳しくすることが多いです。
  • 正規化の目安:部署名など同じ情報を繰り返さないため、部署を別表に分ける(第1〜3正規形の考え方)ことでデータの冗長性と矛盾を減らせます。
SQLの例(イメージ):
CREATE TABLE 部署 (
  部署コード CHAR(3) PRIMARY KEY,
  部署名 VARCHAR(50) NOT NULL
);

CREATE TABLE 社員 (
  社員コード CHAR(5) PRIMARY KEY,
  社員名 VARCHAR(100),
  入社年 INT,
  生年月日 DATE,
  部署コード CHAR(3) NOT NULL,
  FOREIGN KEY (部署コード) REFERENCES 部署(部署コード)
);
-- 正しい部署コードが無いと、社員は登録できない(参照制約で保護)

FAQ

Q1: なぜ社員表に部署コードを持たせるのが自然ですか?
A1: 同じ部署に複数の社員がいるのが普通だからです。部署が1つで社員が多数いる「一対多」の関係では、多側(社員)に参照(部署コード)を置きます。
Q2: 部署コードはNULLにできるか?
A2: 設問では「社員は必ず部署に所属する」とあるため、社員表の部署コードはNULL不可(NOT NULL)にするのが適切です。
Q3: 外部キーがあるとデータ登録が遅くなる?
A3: 参照整合性チェックにわずかなコストはかかりますが、データの矛盾を防ぐため重要です。業務での信頼性を優先します。

関連キーワード: 関係データベース、主キー、外部キー、参照制約、一対多、正規化、リレーション設計
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について