【詳細解説】■ 本問の核心・解法のポイント
伝票形式の非正規形/第1正規形の表から第3正規形までの分解手順を追跡する問題です。
表の属性と関数従属性を整理します。
- 受注番号 → 顧客コード, 受注日
- 顧客コード → 顧客名
- 商品コード → 商品名, 単価
- (受注番号, 商品コード) → 受注数, 受注金額
・各正規化ステップ:
1. 第2正規化(部分関数従属の排除):
主キーは (受注番号, 商品コード) です。
受注番号のみに従属する項目(顧客コード, 顧客名, 受注日)、商品コードのみに従属する項目(商品名, 単価)を別表に分離します。
- 受注(受注番号, 顧客コード, 顧客名, 受注日)
- 受注明細(受注番号, 商品コード, 受注数, 受注金額)
- 商品(商品コード, 商品名, 単価)
2. 第3正規化(推移的関数従属性の排除):
「受注」表において「受注番号 → 顧客コード → 顧客名」という推移的関数従属性が存在するため、「顧客(顧客コード, 顧客名)」を分離します。
最終的に以下の4表となります:
1. 受注(受注番号, 顧客コード, 受注日)
2. 受注明細(受注番号, 商品コード, 受注数, 受注金額)
3. 顧客(顧客コード, 顧客名)
4. 商品(商品コード, 商品名, 単価)
・各選択肢の徹底解説:
・ア:2表では主キーへの部分関数従属や推移的関数従属が残り、第3正規形になりません。
・イ:3表では「受注」から「顧客」を分離しきれず、推移的関数従属性が残ります。
・【選択肢ウ★】:受注、受注明細、顧客、商品の4つの表に分割されるため適切です。
・エ:受注明細と計算項目を過剰に分離する必要はなく、最小分割数は4です。
よって正解はウです。