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

図の説明テキスト
「会員管理」表
| 店舗コード | 店舗名 | 会員番号 | 会員名 | 会員種別コード | 会員種別名 |
|---|---|---|---|---|---|
| 001 | 札幌 | 1 | 試験 花子 | 02 | ゴールド |
| 001 | 札幌 | 2 | 情報 太郎 | 02 | ゴールド |
| 002 | 東京 | 1 | 高度 次郎 | 03 | 一般 |
| 002 | 東京 | 2 | 午前 桜子 | 01 | プラチナ |
| 003 | 大阪 | 1 | 午前 桜子 | 03 | 一般 |

図の説明テキスト
「店舗」表のスキーマ
| 店舗コード | 店舗名 |

図の説明テキスト
「会員種別」表のスキーマ
| 会員種別コード | 会員種別名 |
解答・解説
正解: エ.
関係データベースの正規化に関する問題です。
「会員管理」表に含まれる項目間の関数従属性を明らかにし、適切に表を分割(正規化)する手順を考えます。
まず、「会員管理」表の行を一意に特定するための主キーを特定します。
問題文に「一人の会員が複数の店舗に登録した場合は,会員番号を店舗ごとに付与するものとする」とあることや、「会員管理」表のデータ(札幌の会員番号1と、東京の会員番号1が存在していること)から、会員番号単独では行を一意に特定できないことがわかります。行を特定するためには、店舗コードと会員番号の両方が必要です。
したがって、「会員管理」表の主キーは {店舗コード, 会員番号} の複合キーとなります。
次に、主キーからの関数従属性(ある項目の値が決まれば、別の項目の値も一つに決まる関係)を整理します。
店舗コード店舗名会員種別コード会員種別名{店舗コード, 会員番号}会員名,会員種別コード
表を分割する際、元の表の情報を失わずに復元(結合)できるようにする必要があります(情報無損失分解)。
- 1の従属性から、「店舗」表は
{店舗コード, 店舗名}となります(店舗コードが主キー)。 - 2の従属性から、「会員種別」表は
{会員種別コード, 会員種別名}となります(会員種別コードが主キー)。 - 残りの「会員」表は、主キーである
{店舗コード, 会員番号}と、それに直接従属する{会員名, 会員種別コード}で構成されます。「会員」表は、店舗表や会員種別表と紐づけるための外部キーも持たなければならないため、これらの属性を欠かすことはできません。
よって、「会員」表のスキーマは {会員番号, 店舗コード, 会員名, 会員種別コード} となり、会員番号 と 店舗コード に下線(主キー)が引かれたエが適切です。
各選択肢の解説
- ア:主キーが
会員番号のみとなっており、これでは店舗が異なる同じ会員番号のデータを区別できません(例:札幌の1番と東京の1番など)。また、会員種別コードの列が欠落しており、「会員種別」表と結合できません。 - イ:主キーが
会員番号のみとなっており、店舗ごとの会員を識別することができません。 - ウ:主キーは適切ですが、
会員種別コードが欠落しているため、「会員種別」表と結合して元のデータを復元することができません。 - エ:正解です。主キーが
{会員番号, 店舗コード}であり、必要な非キー属性(会員名,会員種別コード)をすべて含んでいます。



