メインコンテンツへ
データベース関数従属と正規化判定

次の関係スキーマについて、正規形の判定として正しいものはどれか。 【注文明細テーブル】 注文ID, 商品ID, 商品名, 単価, 数量 主キー:{注文ID, 商品ID} 関数従属: ・{注文ID, 商品ID} → 数量(完全関数従属) ・商品ID → 商品名(部分関数従属) ・商品ID → 単価(部分関数従属)

ア.第3正規形(3NF)を満たしている
イ.第2正規形(2NF)は満たしているが、第3正規形(3NF)は満たしていない
ウ.第1正規形(1NF)は満たしているが、第2正規形(2NF)は満たしていない正解
エ.非正規形である(第1正規形すら満たしていない)

解説

2NFのチェックは「主キーのどの部分キーにも直接依存していないか」を確認すること。商品名と単価は「商品ID だけ」で決まってしまう。複合主キーの片方だけに依存する部分関数従属があれば、第1正規形は満たしていても2NFには昇格できない。

なぜ ウ が正解か

第1正規形(1NF)は各列が原子値であれば満たされる。このテーブルは各列が原子値なので 1NF は満たす。第2正規形(2NF)は「非キー属性が主キーに完全関数従属している」ことを要件とする。しかし「商品名」と「単価」は主キーの部分集合である「商品ID」のみに依存する部分関数従属がある。よって 2NF を満たしていない。1NF は満たすが 2NF は満たさない状態であり、正解はウとなる。

なぜ ア は間違いか

部分関数従属が存在する時点で 2NF すら満たしていないため、3NF を満たすことはできない。正規化の前提条件を無視した誤り。

なぜ イ は間違いか

部分関数従属(商品ID → 商品名, 単価)が存在するため 2NF を満たしていない。2NF の定義を誤解した誤り。

なぜ エ は間違いか

非正規形は繰り返しグループ(配列・複数値)が存在するなど 1NF を満たさない状態を指す。このテーブルはすべての属性が原子値であるため 1NF は満たしている。1NF 未満と判断した誤り。

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