ホーム > データベーススペシャリスト試験 > 2010年
データベーススペシャリスト試験 2010年 午前2 問09
次の表を, 第3正規形まで正規化を行った場合、 幾つの表に分割されるか。ここで, 顧客の1回の注文に対して1枚の受注伝票が作られ、顧客は1回の注文で一つ以上の商品を注文できるものとする。

ア:2
イ:3
ウ:4(正解)
エ:5
解説
第3正規形まで正規化した場合の表の分割数【午前2 解説】
要点まとめ
- 結論:第3正規形まで正規化すると4つの表に分割されます。
- 根拠:受注、顧客、商品、受注明細の4つの実体に分け、各表は主キーとそれに従属する属性で構成されるためです。
- 差がつくポイント:複合キーの理解と関数従属性の正確な把握が重要で、受注明細の分割を見落とさないことが鍵です。
正解の理由
この問題は、1つの表に複数の実体(顧客、受注、商品、受注明細)が混在している状態から、第3正規形(3NF)まで正規化する過程を問うています。
- まず、顧客コード→顧客名の関数従属性により「顧客」表が分離されます。
- 次に、商品コード→商品名・単価の関数従属性により「商品」表が分離されます。
- 受注番号→顧客コード・受注日が決まるため「受注」表が分離されます。
- 受注明細は受注番号+商品コードの複合キーで管理され、受注数・受注金額が従属するため「受注明細」表となります。
以上より、4つの表に分割されるため、正解はウ: 4です。
よくある誤解
受注明細を受注表に含めてしまい、分割数を少なく見積もる誤りが多いです。複合キーの理解不足も原因となります。
解法ステップ
- 元の表の属性と関数従属性を洗い出す。
- 顧客コード→顧客名の関係から「顧客」表を分離。
- 商品コード→商品名・単価の関係から「商品」表を分離。
- 受注番号→顧客コード・受注日の関係から「受注」表を分離。
- 受注番号+商品コードの複合キーで「受注明細」表を作成。
- 以上の4つの表に分割されることを確認。
選択肢別の誤答解説
- ア: 2
顧客や商品、受注明細をまとめすぎて分割数が少なすぎます。第3正規形の要件を満たしません。 - イ: 3
受注明細を受注表に含めてしまい、分割数が不足しています。複合キーの扱いが不十分です。 - ウ: 4
正解。顧客、商品、受注、受注明細の4つに正しく分割しています。 - エ: 5
受注明細をさらに細分化する理由がなく、過剰分割となります。
補足コラム
正規化はデータの冗長性を排除し、更新異常を防ぐための重要な手法です。第3正規形では、非キー属性が他の非キー属性に依存しないことが求められます。今回のように複合キーを持つ受注明細は、正規化の理解を深める良い例です。
FAQ
Q: 第3正規形まで正規化すると必ず表は増えるのですか?
A: はい。冗長性を排除するために、複数の実体に分割されることが一般的です。
A: はい。冗長性を排除するために、複数の実体に分割されることが一般的です。
Q: 受注明細の複合キーとは何ですか?
A: 受注番号と商品コードの組み合わせで、受注明細の主キーとなり、各注文商品の明細を一意に識別します。
A: 受注番号と商品コードの組み合わせで、受注明細の主キーとなり、各注文商品の明細を一意に識別します。
Q: 第2正規形と第3正規形の違いは?
A: 第2正規形は部分関数従属性の排除、第3正規形は推移的関数従属性の排除を目的としています。
A: 第2正規形は部分関数従属性の排除、第3正規形は推移的関数従属性の排除を目的としています。
関連キーワード: 正規化, 第3正規形, 関数従属性, 複合キー, 受注明細, データベース設計