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

選択肢
ア:“従業員番号”(正解)
イ:“従業員番号”と“部門コード”
ウ:“従業員名”
エ:“部門コード”
🔒 解説は解答すると表示されます
従業員表の主キー選択【ITパスポート 解説】
正解の理由
設問の条件を見ると、①「各従業員は重複のない従業員番号を一つもつ」とあります。主キー(主キー:テーブル内で各行を一意に識別するための列、英語では primary key)は「一意であること」と「最小であること(余分な列を含まないこと)」が必要です。したがって、単独で一意性を満たす「従業員番号」を主キーにするのが適切です。選択肢のうち、ア(“従業員番号”)がこれを満たします。
なお、部門コードは「外部キー(foreign key:他の表を参照するための列)」として従業員表に入りますが、条件④「一つの部門には複数名の従業員が所属する」ため、部門コードだけでは従業員を一意に特定できません。
解法ステップ
- 条件を順に読み、どの列が一意(重複しない)かを探す。
- 条件①で「従業員番号」が一意であると明示。
- 条件②で「従業員名」は重複する可能性があると明示。
- 条件③で「部門コード」は部門で一意だが、従業員表では複数人に共通する(条件④)。
- 主キーの要件を確認する。
- 一意性:各行を必ず区別できること。
- 最小性:必要最小限の列で構成されていること(余分な列がないこと)。
- 候補を比べる。
- 「従業員番号」は一意であり最小なので主キーに適する。
- 複合キー(例:従業員番号+部門コード)は冗長(従業員番号だけで十分)なので不適。
- 名前や部門コード単独は一意性を満たさないので不適。
- 結論:ア(従業員番号)が主キーとして最も適切。
選択肢別の誤答解説
-
ア: “従業員番号”
理由:条件①で重複しないことが保証されており、1列だけで一意に識別できるので主キーに最適。最小性も満たす。 -
イ: “従業員番号”と“部門コード”(複合主キー)
理由:従業員番号だけで一意に識別できるため、部門コードを付けると冗長になります。主キーは「最小性」を満たすべきなので不適。 -
ウ: “従業員名”
理由:条件②で同姓同名の従業員がいてもよいとあるため、一意性を満たしません。人名は重複しやすく、主キーには向きません。 -
エ: “部門コード”
理由:条件④で一つの部門に複数名の従業員が所属するとあるため、部門コードでは従業員を一意に識別できません。部門コードは従業員表では外部キーとして使うのが適切です。
よくある誤解
- 「部門コードが従業員の所属を表すから主キーにできる」
誤りです。部門コードは複数の従業員と共有されるため、一意性を満たしません。外部キーと主キーは役割が違います。 - 「名前は人を特定できるから主キーになる」
名前は同姓同名が存在するため、データベースの主キーには不適です。氏名は検索や表示用の属性と考えるのが安全です。 - 「複数列を組み合わせれば間違いない」
組み合わせて一意性を確保することはありますが、既に一意な列がある場合は冗長になります。主キーは可能な限りシンプルにします。
補足コラム
-
主キー(primary key)の3つの性質
- 一意性:各行が一意に決まる。
- 非NULL:値が必ず存在する(NULLは不可)。
- 最小性:不要な列を含まない(冗長でない)。
-
外部キー(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が保証され、余分な列が無ければ主キーに適します。ただし、実務では運用上の都合でサロゲートキーを使う場合もあります。
A1. 原則としてはいえます。唯一性と非NULLが保証され、余分な列が無ければ主キーに適します。ただし、実務では運用上の都合でサロゲートキーを使う場合もあります。
Q2. 複合主キーはいつ使うべきですか?
A2. 単独の列では一意にならないが、複数列の組み合わせで自然に一意になる場合に使います。ただし、扱いが複雑になるため、状況によってはサロゲートキーを使う選択もあります。
A2. 単独の列では一意にならないが、複数列の組み合わせで自然に一意になる場合に使います。ただし、扱いが複雑になるため、状況によってはサロゲートキーを使う選択もあります。
Q3. 名前や住所は主キーにできませんか?
A3. 基本的には避けます。変更されやすく(住所変更など)、重複する可能性も高いため、主キーには不向きです。
A3. 基本的には避けます。変更されやすく(住所変更など)、重複する可能性も高いため、主キーには不向きです。
関連キーワード: 主キー、外部キー、候補キー、一意性、最小性、正規化、リレーショナルデータベース、部門コード

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

