応用情報技術者 2010年 春期 午前2 問32
問題文
“受注明細” 表は、どのレベルまでの正規形の条件を満足しているか。ここで、受注番号と明細番号の組は主キーである。

選択肢
ア:第1正規形
イ:第2正規形(正解)
ウ:第3正規形
エ:第4正規形
受注明細表の正規形判定【午前2 解説】
要点まとめ
- 結論:受注明細表は第2正規形(2NF)まで満たしているが、第3正規形(3NF)ではないです。
- 根拠:主キーは「受注番号+明細番号」の複合キーで、部分関数従属がないが、非キー属性間に推移的関数従属が存在します。
- 差がつくポイント:商品コードから商品名が決まるため、非キー属性同士の依存関係を見抜くことが重要です。
正解の理由
イ: 第2正規形が正解です。
受注明細表の主キーは「受注番号+明細番号」の複合キーです。
受注明細表の主キーは「受注番号+明細番号」の複合キーです。
- 第1正規形(1NF)は満たしており、繰り返しグループや多値属性はありません。
- 第2正規形(2NF)は、主キーの一部にのみ依存する非キー属性がないため満たしています。
- しかし、「商品名」は「商品コード」に依存しており、これは主キーの一部ではなく非キー属性間の依存(推移的関数従属)です。
このため、第3正規形(3NF)は満たしていません。
よくある誤解
「商品名が主キーに直接依存している」と誤解しがちですが、実際は商品コードに依存しているため3NF違反となります。
また、複合キーの部分依存と非キー属性間の依存を混同しやすい点にも注意が必要です。
また、複合キーの部分依存と非キー属性間の依存を混同しやすい点にも注意が必要です。
解法ステップ
- 主キーを確認する(受注番号+明細番号の複合キー)。
- 各非キー属性が主キー全体に依存しているかを検証する。
- 非キー属性間の依存関係(商品コード→商品名)を見つける。
- 部分関数従属がないため2NFは満たすと判断。
- 推移的関数従属があるため3NFは満たさないと結論付ける。
選択肢別の誤答解説
- ア: 第1正規形
1NFは繰り返しや多値属性の排除が条件ですが、この表は既に満たしています。 - イ: 第2正規形
正解。部分関数従属はなく2NFを満たしています。 - ウ: 第3正規形
商品コード→商品名の推移的関数従属があるため不適切です。 - エ: 第4正規形
4NFは多値従属の排除が条件で、3NFを満たしていないため論外です。
補足コラム
正規化はデータの冗長性を減らし、更新異常を防ぐための手法です。
- 1NF:繰り返しグループの排除
- 2NF:部分関数従属の排除
- 3NF:推移的関数従属の排除
- 4NF:多値従属の排除
今回のケースでは、商品コードと商品名の関係を別表に分けることで3NFを達成できます。
FAQ
Q: なぜ商品名は主キーに依存しないのですか?
A: 商品名は商品コードに依存し、主キーの一部ではないため、推移的関数従属となります。
A: 商品名は商品コードに依存し、主キーの一部ではないため、推移的関数従属となります。
Q: 第2正規形と第3正規形の違いは何ですか?
A: 2NFは部分関数従属の排除、3NFは推移的関数従属の排除が条件です。
A: 2NFは部分関数従属の排除、3NFは推移的関数従属の排除が条件です。
関連キーワード: 正規化、関数従属、主キー、第2正規形、第3正規形、推移的関数従属

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

