頻出高 ⏱ 8分 ★★★★★

午後対策:正規化問題

非正規テーブルを段階的に正規化する解法

非正規テーブルを段階的に正規化する問題。関数従属を見抜き、どの列がどの列を決定するかを分析する能力が問われる。

① 主キーを特定(全行を一意に識別できる列・列の組み合わせ)
② 繰り返しグループを除去(→ 1NF)
③ 部分関数従属を除去(→ 2NF):複合主キーの一部だけで決まる列
④ 推移関数従属を除去(→ 3NF):主キー以外の列が別の列を決定
非正規テーブル(問題として与えられる形)
受注ID商品ID商品名単価顧客ID顧客名数量
001P01ノートPC80000C01山田2
001P02マウス2000C01山田3
関数従属の分析
従属関係種類
{受注ID, 商品ID} → 数量完全関数従属(主キーに依存)✅
商品ID → 商品名, 単価部分関数従属(商品IDだけで決まる)❌
受注ID → 顧客ID部分関数従属(受注IDだけで決まる)❌
顧客ID → 顧客名推移関数従属(非キー列が決定)❌
3NF の結果
テーブル
受注明細受注ID, 商品ID, 数量
商品商品ID, 商品名, 単価
受注受注ID, 顧客ID
顧客顧客ID, 顧客名

📝 理解度チェック

複合主キー{受注ID, 商品ID}のテーブルで「商品ID → 商品名」が成り立つ場合、これは何の違反か?
3NFへの正規化で除去すべき関数従属はどれか?

読了ボタンを押すとトップページの進捗に反映されます