難易度・正答率・重要度
- 難易度: ★★★☆☆(正規化の原則理解)
- 正答率: ★★☆☆☆(従属性の見極めが鍵)
- 重要度: ★★★☆☆(データベース設計の基礎)
問題文
以下に示す表は、ある小売店が利用している受注管理表の一部である。この表を正規化した構造として、最も適切なものを下記の解答群から選べ。
ただし、単価は商品コードによって一意に定まるものとする。

出典:中小企業診断協会|2024年度 第1次試験問題|経営情報システム(PDF)
解答
- 正解: ア
解説
- 前提の整理:
「単価は商品コードによって一意」→ 単価は商品マスタに持つべき属性。受注明細に単価を重複保持すると更新不整合の原因になる。 - ア:〇(正規化の観点で最適)
・受注ヘッダ:受注番号を主キーとして「受注日・得意先コード・合計金額」。
・受注明細:複合主キー(受注番号+商品コード)で「受注数量」。
・商品マスタ:商品コードを主キーに「単価」。
・合計金額はヘッダで派生保持(または計算)とする設計が一般的で、単価は商品マスタで一意に管理し、明細は数量のみを保持して冗長性を回避できる。 - イ:×
受注ヘッダに商品コードを含めると、1受注複数商品の構造と整合しない(繰り返し属性の混入)。さらに「得意先コード・商品コード・単価」は関係不明で不整合。 - ウ:×
明細のキーに得意先コードを含めるのは不適切。明細の従属先は受注番号であり、得意先コードは受注ヘッダの属性。 - エ:×
受注日を別テーブルに切り出す意味がなく、関数従属が破綻する分割。ヘッダから受注日を分離すると更新・参照が煩雑化。 - オ:×
ヘッダに商品コードが含まれ、1対多構造を崩している。明細に得意先コードを持たせるのも不適切。
学習のポイント
- 第1正規形: 繰り返し属性を排除し、明細は独立テーブル化。
- 第2正規形: 複合主キーに部分従属する属性を除外(得意先コードはヘッダへ)。
- 第3正規形: 非キー属性間の従属を排除(単価は商品コードのみに従属→商品マスタへ)。