データベーススペシャリスト 2020年 午前2 問05
問題文
第2正規形であるが第3正規形でない表はどれか。ここで講義名に対して担当教員は一意に決まり、所属コードに対して勤務地は一意に決まるものとする。また{}は繰返し項目を表し、実線の下線は主キーを表す。

選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
第2→第3正規形判定【午前2解説】
正解の理由
表 ウ は主キーが単一属性の「社員番号」であるため、第2正規形(2NF)は満たします。これは第2正規形の定義が「主キーが複合キーの一部に対する部分従属がないこと」を要求しており、単一キーでは部分従属が発生しないためです。一方で、問題文の条件「所属コードに対して勤務地は一意に決まる」より、関数従属性が
と与えられます。社員番号から所属コードが決まるので
と によって
が成立します。これは非キー属性同士の推移的従属に該当し、第3正規形(3NF)が要求する「非キー属性が他の非キー属性に依存してはならない」という条件に反します。したがって ウ は「第2正規形であるが第3正規形でない」表です。
解法ステップ
- 主キー(候補キー)を特定する。
- ウ:主キーは社員番号(単一属性)。
- 表の属性間の関数従属性(FD)を書き出す。
- 問題文の条件をFDで表現:。また通常、社員番号から他属性は決まる:。
- 第2正規形の判定:
- 主キーが複合であれば部分従属がないか確認。主キーが単一なら自動的に2NF成立。
- 第3正規形の判定:
- 非キー属性間の推移的従属性がないか確認。 かつ (Aがキー、Bが非キー、Cが非キー)の場合は3NF違反。
- 以上を踏まえて選択肢を比較し、条件に合うものを選ぶ。
選択肢別の誤答解説
- ア:誤り。表の主キーは(学生番号, 講義名)と解釈され、ここで講義名→担当教員が成立すると講義名が主キーの一部に依存する「部分従属」が発生します。部分従属があるため第2正規形を満たさず、結果として第3正規形でもありません。前回の誤りではこの部分従属を見落としていましたが、正しくは第2正規形を満たさないという評価になります。
- イ:誤り。主キーは社員番号の単一属性で、氏名・入社年月日・電話番号はいずれも社員番号にのみ従属すると想定され(追加の従属性が与えられていない)、推移的従属や部分従属は発生しないため第3正規形を満たします。したがって「2NFで3NFでない」には該当しません。
- ウ:正解。理由は上記「正解の理由」を参照。単一主キーで2NF成立、所属コード→勤務地 による推移的従属で3NF違反。
- エ:誤り。趣味が繰返し属性({…})として1つのセルに複数値を持っているため、第1正規形(1NF)を満たしていません。1NF以前の問題があるため2NFどころではありません。
よくある誤解
- 「主キーが単一なら自動的に3NFを満たす」:誤り。単一キーでも非キー属性間に推移的従属があれば3NF違反になります(今回のウがその典型)。
- 「部分従属と推移的従属を混同する」:部分従属は主キーが複合キーの場合に起き、推移的従属は非キー属性を介して主要キーが別の非キー属性を決定する場合に起きます。判定時はどちらの形かを明確に区別すること。
- 「繰返し項目があっても2NFの議論ができる」:繰返し項目がある表はまず1NFを満たしていないため、上位の正規形判定の前に解消すべきです。
補足コラム
第3正規形への典型的な対処法は推移的従属を切り離して別表に分割することです。ウ の場合、次のように分解すると3NFになります。
- 社員表:社員(社員番号, 氏名, 所属コード)
- 所属表:所属(所属コード, 勤務地)
こうすることで の関係は所属表に移され、社員表内では非キー属性同士の推移的従属が消えます。実務では「部署(所属)テーブル」を別に設けるのが一般的です。
FAQ
Q1. 主キーが単一でも部分従属は起きますか?
A1. いいえ。部分従属は「複合主キーの一部に対する従属」を指します。単一主キーなら部分従属は定義上発生しません。
A1. いいえ。部分従属は「複合主キーの一部に対する従属」を指します。単一主キーなら部分従属は定義上発生しません。
Q2. 推移的従属は常に3NF違反ですか?
A2. はい。推移的従属(キー→非キーA、非キーA→非キーB)を含む場合は第3正規形の条件に反します。ただし、非キーAが候補キーまたは従属性がキーに基づく場合など例外的条件も理論上はあるため、状況に応じた検討が必要です。
A2. はい。推移的従属(キー→非キーA、非キーA→非キーB)を含む場合は第3正規形の条件に反します。ただし、非キーAが候補キーまたは従属性がキーに基づく場合など例外的条件も理論上はあるため、状況に応じた検討が必要です。
Q3. 繰返し項目はどの正規形の違反ですか?
A3. 繰返し項目は第1正規形(1NF)の違反です。まず1NFを満たすように分割・正規化する必要があります。
A3. 繰返し項目は第1正規形(1NF)の違反です。まず1NFを満たすように分割・正規化する必要があります。
関連キーワード: 正規化、第2正規形、第3正規形、部分従属、推移的従属、関数従属性、繰返し項目

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

