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

基本情報技術者 2009年 春期 午前(科目A)32


問題文

“従業員”表を第3正規形にしたものはどれか。ここで、下線部は主キーを表す。
従業員(従業員番号, 従業員氏名, {技能コード, 技能名, 技能経験年数})
({}は繰返しを表す)
基本情報技術者 2009年 春期 午前(科目A) 問32の選択肢の画像

選択肢

(正解)

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

従業員と技能の正規化【午前解説】

正解の理由

正解は です。元の表は「従業員番号, 従業員氏名, {技能コード, 技能名, 技能経験年数}」と繰り返し群を持ち、さらに属性間の依存関係が混在しています。第3正規形(3NF)にするためは次を満たす必要があります。
  • 1NF:繰り返し群を排除して原子値にする(技能ごとに行を分ける)。
  • 2NF:主キーの部分集合に依存する属性(部分従属性)を分離する。
  • 3NF:非キー属性が他の非キー属性を決定する(推移従属性)場合は分離する。
ここでの関数従属は概ね次の通りです。
  • 従業員番号 → 従業員氏名
  • 技能コード → 技能名
  • (従業員番号, 技能コード) → 技能経験年数
したがって正しい分解は以下の三つです(ウの構成に一致)。
  • 従業員(従業員番号 PK, 従業員氏名)
  • 技能(技能コード PK, 技能名)
  • 従業員技能(従業員番号 FK, 技能コード FK, 技能経験年数, 主キーは (従業員番号, 技能コード))
ウはこの分解をそのまま表現しているため3NFを満たします。

解法ステップ

  1. 元の関係で繰り返し群({技能...})を検出し、行単位の表現に変換する。
  2. 主キー候補を決める(技能の繰り返しを含めると従業員番号+技能コードが行のキー)。
  3. 各属性の関数従属を列挙する(誰が何の技能を何年?技能名は技能コードで決定)。
  4. 部分従属があれば分割して2NFにし、推移従属(技能名のような)をさらに分割して3NFにする。
  5. 得られた関係がウの3表構成と一致するか確認する。

選択肢別の誤答解説

ア:繰り返し群をそのまま残しているため1行あたり複数技能を扱う構造で1NF違反、また技能名の依存も整理されていません。
イ:技能名が別表になっているが、従業員氏名が技能関係と同じ行に残っているため従業員情報の冗長性や部分従属性の問題が残ります。技能コードの取り扱いが不整合です。
ウ:従業員、技能、従業員技能に正しく分割しており、主キーと外国キーも整合しているため3NFを満たします(正解)。
エ:従業員氏名が技能経験年数と同じグループに残っており、部分従属性や冗長性が解消されていないため3NFになっていません。

よくある誤解

  • 「技能名は従業員に属する属性だから残す」と思いがちですが、技能名は技能コードに依存するため技能テーブルに分離すべきです。
  • 「繰り返し群を分ければOK=2NFで十分」と誤認しがちで、技能名のような推移従属性を見落とすミスがあります。
  • 「複合主キーがあると第3正規形にならない」と混同する方がいますが、重要なのは非キー属性の従属性であり、適切に分解すれば3NFになります。

補足コラム

実務では正規化はデータの整合性を高めるための基本だが、性能上の理由で意図的に非正規化(冗長化)することもあります。試験では設問通りの理想的な正規化(1NF→2NF→3NF)を問われることが多いので、まずは理論どおりに分解できるかを確実に理解してください。なお、3NFのさらに厳密化であるBCNFは候補キーの扱いで追加の注意が必要です。

FAQ

Q1: 技能名を従業員技能表に残してもダメですか?
A1: ダメです。技能名は技能コードにのみ依存するため従業員技能表に残すと技能名が技能コードごとに重複し、更新異常が発生します。
Q2: 主キーが複合キーのときどう判断すればいいですか?
A2: 非キー属性が複合キーの一部にのみ依存している(部分従属性)場合は2NF違反です。部分依存を除去してからさらに推移従属性を検討します。
Q3: 3NFとBCNFの違いは?
A3: 3NFは「非キー属性が他の非キー属性に依存しない」ことを要求し、BCNFは「すべての関数従属性の左辺が候補キーである」ことを要求します。特殊ケースで3NFは満たすがBCNFは満たさない関係があります。

関連キーワード: 第3正規形、正規化、繰り返し属性、関数従属性、部分従属性、推移従属性、正規化手順、主キー、外部キー、合成主キー、BCNF、リレーショナルデータベース
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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