応用情報技術者 2017年 春期 午前2 問27
問題文
“受注明細” 表は、どのレベルまでの正規形の条件を満足しているか。ここで、実線の下線は主キーを表す。

選択肢
ア:第1正規形
イ:第2正規形(正解)
ウ:第3正規形
エ:第4正規形
🔒 解説は解答すると表示されます
第2正規形判定【午前2解説】
正解の理由
この表は主キーが複合キー(受注番号+明細番号)であり、全ての非キー属性が主キー全体に対して完全に関数従属しています。一方で、商品名は商品コードに従属しており、商品コード自体が主キー全体に従属するため、主キーから非キー属性への「推移的従属」が発生します。したがって、部分従属は存在しないため第2正規形を満たし、推移的従属により第3正規形は満たされません。以上より選択肢イ(第2正規形)が正しいです。
(関数従属の要約)
(これが推移的従属を生む)
(これが推移的従属を生む)
解法ステップ
- 主キーを確定する。受注明細では「受注番号」と「明細番号」の複合キーが主キーとなる。
- 1NFの確認:各列が単一値であれば1NFを満たす(本表は満たしている)。
- 2NFの確認:非キー属性が主キーの一部にのみ依存していないかを調べる。ここでは商品コード・数量は複合キー全体に依存しているため部分従属はない。
- 3NFの確認:非キー属性間の依存(推移的従属)がないかを調べる。商品名は商品コードに依存しているため、主キー→商品コード→商品名 の形になり推移的従属がある。
- 4NFの確認:多値従属性が存在するか。該当データからは多値従属は認められない。
以上の判定により第2正規形で止まる。
選択肢別の誤答解説
- ア: 第1正規形
誤り。表は1NFの条件(各セルが原子値)を満たすが、さらに部分従属がないため2NFも満たしている。単に1NFとするのは過小評価。 - イ: 第2正規形
正しい。部分従属はないが、商品名が商品コードに依存するため推移的従属があり3NFは満たさない。 - ウ: 第3正規形
誤り。3NFを満たすには非キー属性間の推移的従属が存在してはならない。ここでは があるため3NFに違反する。 - エ: 第4正規形
誤り。4NFまで進めるには多値従属性の排除が必要だが、与えられた表では多値従属性の問題はなく、まず3NFの条件を満たしていないため4NFは論外。
よくある誤解
- 商品名が「主キー全体に依存していない」として2NFを否定してしまう誤り:実際には商品名は商品コードに依存しており、商品コード自体は主キー全体に依存するため「部分従属」ではなく「推移的従属」である。部分従属が無ければ2NFは満たす。
- 主キーの取り方を誤る誤解:受注明細の主キーは(受注番号, 明細番号)が自然であり、誤って商品コードを主キーと見なすと判定が変わる。設計上の主キーを確認してから判定すること。
補足コラム
第3正規形にするための典型的な分解例:
- 受注明細テーブル(分解後)
- 受注番号, 明細番号, 商品コード, 数量
- 主キー: (受注番号, 明細番号)
- 商品テーブル(分解後)
- 商品コード, 商品名
- 主キー: 商品コード
この分解により の従属は商品テーブル内に閉じられ、受注明細側には推移的従属が残らなくなるため受注明細は3NFを満たします(ただし分解は無損失分解であることを確認)。
FAQ
Q1: 「部分従属」と「推移的従属」はどう違いますか?
A1: 部分従属は複合キーの一部だけに非キー属性が依存すること。推移的従属は主キー→A と A→B の関係がある場合に主キー→B が間接的に成り立つこと。前者は2NFの否定要因、後者は3NFの否定要因です。
A1: 部分従属は複合キーの一部だけに非キー属性が依存すること。推移的従属は主キー→A と A→B の関係がある場合に主キー→B が間接的に成り立つこと。前者は2NFの否定要因、後者は3NFの否定要因です。
Q2: 表をそのままにしておくと何が問題になりますか?
A2: 商品名を複数行で重複して保持するため更新異常(商品名変更時に複数行更新が必要)やデータ整合性の問題が生じやすくなります。
A2: 商品名を複数行で重複して保持するため更新異常(商品名変更時に複数行更新が必要)やデータ整合性の問題が生じやすくなります。
Q3: 受注明細の主キーを (受注番号, 商品コード) にしたらどうなる?
A3: その場合に明細番号の役割が変わる設計になるため議論が変わる。主キーの定義は正規化判定に直接影響するので、業務ルールに合った主キーを最初に決める必要があります。
A3: その場合に明細番号の役割が変わる設計になるため議論が変わる。主キーの定義は正規化判定に直接影響するので、業務ルールに合った主キーを最初に決める必要があります。
関連キーワード: 正規化, 関数従属, 部分従属, 推移的従属, 第2正規形, 第3正規形, 多値従属性, 第4正規形

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

