本文へスキップ

平成30年度 春期 ITパスポート試験 問81

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

問81
頻出度★★★

顧客名と住所, 商品名と単価, 顧客が注文した商品の個数と注文した日付を関係データベースで管理したい。正規化された表として, 適切なものはどれか。ここで, 下線は主キーを表し, 顧客名や商品名には, それぞれ同一のものがあるとする。

  • 顧客
    顧客番号(主キー)顧客名住所
    商品
    商品番号(主キー)商品名単価
    注文
    注文番号(主キー)顧客番号商品番号個数日付
  • 顧客
    顧客番号(主キー)顧客名住所
    商品
    商品番号(主キー)商品名単価
    注文
    注文番号(主キー)顧客名商品名個数日付
  • 顧客
    顧客番号(主キー)顧客名住所日付
    注文
    注文番号(主キー)顧客名商品名単価個数
  • 商品
    商品番号(主キー)商品名単価個数
    注文
    注文番号(主キー)商品番号顧客名住所日付
出典 平成30年度 春期 ITパスポート試験 問81
解説

問 81

  • ア

    正解 アは 3 つの表を、それぞれの実体に対応させて過不足なく分割している。顧客表は「顧客番号(主キー)・顧客名・住所」、商品表は「商品番号(主キー)・商品名・単価」、注文表は「注文番号(主キー)・顧客番号・商品番号・個数・日付」。顧客名や商品名は重複しうるため一意に識別できないが、アは注文表から顧客番号・商品番号(外部キー)で顧客表・商品表を参照しているので、どの顧客・どの商品かを正しく特定できる。また住所は顧客表だけ、単価は商品表だけ、個数と日付は注文表だけに置かれ、同じ事実が複数箇所に重複しない。これは更新時異常の起きない正規化された設計であり、要件をすべて満たす。

  • 不正解イ

    顧客表・商品表は妥当だが、注文表が顧客番号・商品番号ではなく重複しうる「顧客名」「商品名」で顧客・商品を参照している。同名の顧客や商品があると一意に特定できず、正しく結合できない。参照は主キーである番号で行うべきで不適切。

  • 不正解ウ

    顧客表に注文ごとの属性である「日付」が混入しており、1 顧客に日付が 1 つしか持てず更新時異常が起きる。さらに注文表に商品固有の「単価」を持ち(商品表も無い)、名前で参照するなど冗長・分割不足で正規化されていない。

  • 不正解エ

    商品表に注文ごとの属性である「個数」が混入し、注文表には顧客固有の「住所」を重複して持ち(顧客表が無い)、顧客も重複しうる顧客名で参照している。属性が正しい実体に配置されておらず冗長で、正規化された設計ではない。

ここがポイント
  • 正規化: 各属性を従属する実体の表に配置し、同じ事実を重複させない(住所は顧客、単価は商品、個数・日付は注文)。表間の関連は外部キーで結ぶ。
  • 主キーと参照の原則: 顧客名・商品名のように重複しうる値は一意識別に使えないため、参照や結合は主キー(顧客番号・商品番号)で行う。
用語

解答の記録