【詳細解説】■ 本問の核心・解法のポイント
与えられた非正規形/第1正規形の表から関数従属を特定し、第2正規形(部分関数従属の排除)、第3正規形(推移的関数従属の排除)の手順を踏んで表を分割します。
1. 関数従属関係の整理:
・受注番号 → 顧客コード, 受注日
・顧客コード → 顧客名
・商品コード → 商品名, 単価
・{受注番号, 商品コード} → 受注数, 受注金額(受注金額=単価×受注数)
2. 第2正規化(部分関数従属の排除):
主キー {受注番号, 商品コード} に対して、一部の候補キー属性(受注番号のみ、商品コードのみ)に従属する属性を切り離します。
・受注明細表:{受注番号, 商品コード}, 受注数, 受注金額
・受注表:{受注番号}, 顧客コード, 顧客名, 受注日
・商品表:{商品コード}, 商品名, 単価
3. 第3正規化(推移的関数従属の排除):
受注表において「受注番号 → 顧客コード → 顧客名」という推移的関数従属が存在するため、顧客情報を分離します。
・受注表:{受注番号}, 顧客コード, 受注日
・顧客表:{顧客コード}, 顧客名
以上より、「受注」「受注明細」「商品」「顧客」の4つの表に分割されます。
・各選択肢の徹底解説:
・ア:2表では部分関数従属や推移的関数従属が残り、第3正規形を満たせません。
・イ:3表では顧客情報または商品情報の推移的関数従属が残ってしまいます。
・ウ:【選択肢ウ★】受注、受注明細、商品、顧客の4表に正しく分割されます。
・エ:5表に過剰分割する必要はありません。
よって正解はウです。