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

ITパスポート 2022年 65


問題文

条件①〜⑤によって、関係データベースで管理する“従業員”表と“部門”表を作成した.“従業員”表の主キーとして、最も適切なものはどれか。
〔条件〕 ① 各従業員は重複のない従業員番号を一つもつ。 ② 同姓同名の従業員がいてもよい。 ③ 各部門は重複のない部門コードを一つもつ。 ④ 一つの部門には複数名の従業員が所属する。 ⑤ 1人の従業員が所属する部門は一つだけである。
ITパスポート 2022年  問65の問題画像

選択肢

“従業員番号”(正解)
“従業員番号”と“部門コード”
“従業員名”
“部門コード”

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

従業員表の主キー選択【ITパスポート 解説】

正解の理由

設問の条件を見ると、①「各従業員は重複のない従業員番号を一つもつ」とあります。主キー(主キー:テーブル内で各行を一意に識別するための列、英語では primary key)は「一意であること」と「最小であること(余分な列を含まないこと)」が必要です。したがって、単独で一意性を満たす「従業員番号」を主キーにするのが適切です。選択肢のうち、(“従業員番号”)がこれを満たします。
なお、部門コードは「外部キー(foreign key:他の表を参照するための列)」として従業員表に入りますが、条件④「一つの部門には複数名の従業員が所属する」ため、部門コードだけでは従業員を一意に特定できません。

解法ステップ

  1. 条件を順に読み、どの列が一意(重複しない)かを探す。
    • 条件①で「従業員番号」が一意であると明示。
    • 条件②で「従業員名」は重複する可能性があると明示。
    • 条件③で「部門コード」は部門で一意だが、従業員表では複数人に共通する(条件④)。
  2. 主キーの要件を確認する。
    • 一意性:各行を必ず区別できること。
    • 最小性:必要最小限の列で構成されていること(余分な列がないこと)。
  3. 候補を比べる。
    • 「従業員番号」は一意であり最小なので主キーに適する。
    • 複合キー(例:従業員番号+部門コード)は冗長(従業員番号だけで十分)なので不適。
    • 名前や部門コード単独は一意性を満たさないので不適。
  4. 結論:(従業員番号)が主キーとして最も適切。

選択肢別の誤答解説

  • : “従業員番号”
    理由:条件①で重複しないことが保証されており、1列だけで一意に識別できるので主キーに最適。最小性も満たす。
  • イ: “従業員番号”と“部門コード”(複合主キー)
    理由:従業員番号だけで一意に識別できるため、部門コードを付けると冗長になります。主キーは「最小性」を満たすべきなので不適。
  • ウ: “従業員名”
    理由:条件②で同姓同名の従業員がいてもよいとあるため、一意性を満たしません。人名は重複しやすく、主キーには向きません。
  • エ: “部門コード”
    理由:条件④で一つの部門に複数名の従業員が所属するとあるため、部門コードでは従業員を一意に識別できません。部門コードは従業員表では外部キーとして使うのが適切です。

よくある誤解

  1. 「部門コードが従業員の所属を表すから主キーにできる」
    誤りです。部門コードは複数の従業員と共有されるため、一意性を満たしません。外部キーと主キーは役割が違います。
  2. 「名前は人を特定できるから主キーになる」
    名前は同姓同名が存在するため、データベースの主キーには不適です。氏名は検索や表示用の属性と考えるのが安全です。
  3. 「複数列を組み合わせれば間違いない」
    組み合わせて一意性を確保することはありますが、既に一意な列がある場合は冗長になります。主キーは可能な限りシンプルにします。

補足コラム

  • 主キー(primary key)の3つの性質
    1. 一意性:各行が一意に決まる。
    2. 非NULL:値が必ず存在する(NULLは不可)。
    3. 最小性:不要な列を含まない(冗長でない)。
  • 外部キー(foreign key)は、別の表の主キーを参照して関係を作るための列です。本問では従業員表の「部門コード」が部門表の主キー「部門コード」を参照する形になります。
  • 実務での例(SQL)
    以下は、設問どおりの関係を表す簡単なテーブル定義例です。
CREATE TABLE 部門 (
  部門コード CHAR(4) PRIMARY KEY,
  部門名 VARCHAR(100),
  所在地 VARCHAR(100)
);

CREATE TABLE 従業員 (
  従業員番号 CHAR(6) PRIMARY KEY,  -- <mark>ア</mark>を主キーにする
  従業員名 VARCHAR(100),
  部門コード CHAR(4),
  生年月日 DATE,
  住所 VARCHAR(200),
  FOREIGN KEY (部門コード) REFERENCES 部門(部門コード)
);
  • 「候補キー(candidate key)」とは、主キーになりうる属性の集合のことです。本問では「従業員番号」が明確な候補キーです。場合によっては複数の候補キーが存在し、その中から一つを主キーに選びます。
  • 「サロゲートキー(surrogate key)」は業務上の意味を持たない番号(例:自動採番ID)で、実務ではこれを主キーにして扱うことも多いです。

FAQ

Q1. 従業員番号が重複しないなら必ず主キーにしてよいですか?
A1. 原則としてはいえます。唯一性と非NULLが保証され、余分な列が無ければ主キーに適します。ただし、実務では運用上の都合でサロゲートキーを使う場合もあります。
Q2. 複合主キーはいつ使うべきですか?
A2. 単独の列では一意にならないが、複数列の組み合わせで自然に一意になる場合に使います。ただし、扱いが複雑になるため、状況によってはサロゲートキーを使う選択もあります。
Q3. 名前や住所は主キーにできませんか?
A3. 基本的には避けます。変更されやすく(住所変更など)、重複する可能性も高いため、主キーには不向きです。

関連キーワード: 主キー、外部キー、候補キー、一意性、最小性、正規化、リレーショナルデータベース、部門コード
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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