本文へスキップ

平成26年度 春期 ITパスポート試験 問60

この問題の解説と、これまでの解答の記録です。

問60
頻出度★★★

ファイルで管理されていた受注データを,受注に関する情報と商品に関する情報に分割して,正規化を行った上で関係データベースの表で管理する。正規化を行った結果の表の組合せとして,最も適切なものはどれか。ここで,同一商品名で単価が異なるときは商品番号も異なるものとする。 受注データ

受注番号発注者名商品番号商品名個数単価
T0001山田花子M0001商品 153,000
T0002木村太郎M0002商品 234,000
T0003佐藤秋子M0001商品 123,000
  • 上段の表
    受注番号発注者名
    下段の表
    商品番号商品名個数単価
  • 上段の表
    受注番号発注者名商品番号
    下段の表
    商品番号商品名個数単価
  • 上段の表
    受注番号発注者名商品番号個数
    下段の表
    商品番号商品名単価
  • 上段の表
    受注番号発注者名商品番号個数単価
    下段の表
    商品番号商品名
出典 平成26年度 春期 ITパスポート試験 問60
解説

問 60

  • 不正解ア

    受注表に商品番号がないため、どの受注がどの商品なのかを結び付ける手段が失われます。また個数は受注ごとの情報なのに商品表側に置かれており、同じ商品を複数の受注で注文したときに個数を正しく持てません。分割後に元データを復元できない誤った分割です。

  • 不正解イ

    受注表と商品表が商品番号で結び付く点は正しいものの、個数が商品表に残っています。個数は商品番号ではなく受注番号に従属する項目なので、商品表では M0001 に対して 5 と 2 のどちらを入れるか決まらず、商品1行につき1つの個数しか持てません。項目の置き場所を誤っています。

  • ウ

    正解 正規化とは、1つの表に混在している項目を「何によって値が決まるか(関数従属)」ごとに分け、重複と更新時の矛盾をなくす作業です。受注データの各項目を見ると、発注者名と個数は受注番号が決まれば決まる(受注1件ごとの情報)のに対し、商品名と単価は商品番号が決まれば決まる(商品ごとの情報)です。実際 T0001 と T0003 は同じ商品番号 M0001 で、商品名「商品 1」と単価 3,000 が重複して記録されています。そこで受注に関する情報を〈受注番号, 発注者名, 商品番号, 個数〉、商品に関する情報を〈商品番号, 商品名, 単価〉に分割すれば、商品名・単価の重複が排除され、単価を変更するときも商品表の1行を直すだけで済みます。両表は商品番号(受注表側では外部キー、商品表側では主キー)で結び付くので、元の受注データは結合により復元できます。この構成を示しているのが選択肢ウです。

  • 不正解エ

    単価が受注表に残っています。設問の条件「同一商品名で単価が異なるときは商品番号も異なる」より単価は商品番号に従属するので、単価は商品表に置くべき項目です。受注表に残すと同じ商品の単価が受注件数だけ重複して記録され、単価改定のたびに複数行を直す必要が生じ、更新漏れによる矛盾(更新時異常)が起こります。

ここがポイント
  • 正規化の基本は「その項目は何によって決まるか(関数従属)」で表を分けること。受注番号に従属する項目(発注者名・個数)は受注表へ、商品番号に従属する項目(商品名・単価)は商品表へ振り分ける。
  • 分割した表は共通の項目(ここでは商品番号=商品表の主キー、受注表の外部キー)で結合でき、元のデータを復元できなければならない。重複排除により更新時異常を防ぐことが正規化の目的。
用語

解答の記録