メインコンテンツへ
データベース

次のテーブル「受注(受注ID, 顧客ID, 商品ID, 担当者ID, 担当者部門)」において、次の関数従属が成立している。 受注ID → 顧客ID, 商品ID, 担当者ID 担当者ID → 担当者部門 このテーブルが第3正規形(3NF)の条件を満たしていない理由として正しいものはどれか。

ア.受注IDが主キーでないため、第1正規形の条件を満たしていない
イ.担当者IDが主キーではないが担当者部門を関数的に決定しており、推移的関数従属が存在する正解
ウ.商品IDと顧客IDが別テーブルに分離されていないため第2正規形の条件を満たしていない
エ.担当者部門はNULLになりえるため、第1正規形の条件を満たしていない

解説

3NF違反の犯人は「推移的関数従属」。主キー→A→Bという2段階の依存関係が問題。担当者IDが橋渡しになって担当者部門が間接的に決まっている!

なぜ イ が正解か

問題のテーブル: 主キーは受注ID。受注ID→担当者ID(直接従属)、担当者ID→担当者部門(担当者IDが主キーでないのに担当者部門を決定)。これが推移的関数従属: 受注ID→担当者ID→担当者部門。3NFの条件は「主キー以外の属性が他の非キー属性を関数的に決定してはならない」。担当者IDは非キーだが担当者部門を決定しているため3NF違反。解決: 担当者(担当者ID, 担当者部門)を別テーブルに分離する。

なぜ ア は間違いか

受注IDは主キーであると仮定されている(「受注ID →」が関数従属の決定子として機能している)。主キーでないという前提が誤り。

なぜ ウ は間違いか

商品IDと顧客IDは受注IDに直接従属しており、部分的関数従属ではない(受注IDは単一属性の主キーなので部分従属は起きない)。2NF違反ではない。

なぜ エ は間違いか

第1正規形はNULLや繰り返しグループに関する条件。この文脈でのNULLの可能性は3NF評価とは独立した別の問題であり、3NF違反の理由ではない。

出典: AI生成問題(学習用)