本文へスキップ

令和5年度 ITパスポート試験 問59

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

問59
頻出度★★★

関係データベースで管理された“会員管理”表を正規化して,“店舗”表,“会員種別”表及び“会員”表に分割した。“会員”表として,適切なものはどれか。ここで,表中の下線は主キーを表し,一人の会員が複数の店舗に登録した場合は,会員番号を店舗ごとに付与するものとする。 会員管理

店舗コード店舗名会員番号会員名会員種別コード会員種別名
001札幌1試験 花子02ゴールド
001札幌2情報 太郎02ゴールド
002東京1高度 次郎03一般
002東京2午前 桜子01プラチナ
003大阪1午前 桜子03一般

店舗

店舗コード店舗名

会員種別

会員種別コード会員種別名
  • 会員番号会員名
  • 会員番号会員名会員種別コード
  • 会員番号店舗コード会員名
  • 会員番号店舗コード会員名会員種別コード
出典 令和5年度 ITパスポート試験 問59
解説

問 59

  • 不正解ア

    主キーが会員番号のみで店舗コードを含みません。会員番号は店舗ごとに付与され店舗をまたいで重複する(1 が札幌・東京・大阪に存在)ため一意になりません。さらに会員種別コードも欠落しており、各会員の会員種別が表現できず情報が失われます。

  • 不正解イ

    会員種別コードは持つものの、主キーが会員番号のみで店舗コードが無いため、店舗をまたいで重複する会員番号を一意に識別できません。複合主キーになっていない点が誤りです。

  • 不正解ウ

    主キーは「店舗コード+会員番号」で正しいのですが、会員種別コードが欠落しています。会員種別は「店舗コード+会員番号」の組に従属する属性(午前桜子は東京でプラチナ・大阪で一般)であり、これを落とすと元の会員管理表を復元できず、無損失分解になりません。

  • エ

    正解 正規化の鍵は「会員番号は店舗ごとに付与される」という条件です。実際、会員番号=1 は札幌・東京・大阪のいずれにも存在し、会員番号だけでは会員を一意に識別できません。したがって会員表の主キーは「店舗コード+会員番号」の複合キーにする必要があります。次に各列がどのキーに従属するかを見ると、会員名と会員種別コードは「店舗コード+会員番号」の組に対して決まります(例: 午前桜子は東京では会員種別コード01=プラチナ、大阪では03=一般と、同じ会員番号でも店舗ごとに会員種別が異なる)。一方、店舗名は店舗コードだけで、会員種別名は会員種別コードだけで決まるので、それぞれ店舗表・会員種別表へ分離します。結果として会員表は「店舗コード(主キー)・会員番号(主キー)・会員名・会員種別コード(外部キー)」となり、これは元の表を欠落なく復元できる無損失分解です。これがエに一致します。

ここがポイント
  • 正規化と複合主キー: 単独では一意にならない項目は複合主キーにする。会員番号が店舗ごとに付与される条件から、店舗コードとの複合キー(店舗コード+会員番号)が会員表の主キーになる。
  • 関数従属に基づく属性配置(無損失分解): 店舗名は店舗コードに、会員種別名は会員種別コードに従属するので別表へ分離。一方、会員名・会員種別コードは複合キー全体に従属するので会員表に残し、元表を欠落なく復元できる形にする。
用語

解答の記録