ITパスポート過去問 令和6年度(2024年)問81
一つの表で管理されていた受注データを,受注に関する情報と商品に関する情報に分割して, 正規化を行った上で関係データベースの表で管理する。正規化を行った結果の表の組合せとして,最も適切なものはどれか。ここで,同一商品で単価が異なるときは商品番号も異なるものとする。また,発注者名には同姓同名はいないものとする。


選択肢
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
元の受注データでは、受注のたびに変わる情報(発注者名、商品番号、個数)と、商品ごとに決まる情報(商品名、単価)が同じ表に混在しています。正規化では、受注番号で決まる項目を受注表に、商品番号で決まる項目を商品表に分けます。その結果、受注表は「受注番号、発注者名、商品番号、個数」、商品表は「商品番号、商品名、単価」とするのが適切です。
Point
この問題は、1つの表に混在しているデータを、項目間の依存関係に基づいて分割し、重複や更新時の不整合が起きにくい表構造にできるかを確認しています。具体的には、「受注番号で決まる項目」と「商品番号で決まる項目」を区別して、受注表と商品表に正しく配置できることが問われています。
解くために必要な知識
この問題を解くには、正規化の目的と、どの項目がどの項目に従属するか(関数従属)を理解している必要があります。
用語の整理
| 用語名 | 意味 |
|---|---|
| 関係データベース(RDB) | データを表(テーブル)として管理し、表同士を共通項目で関連付けて扱う方式です。 |
| 正規化 | データの重複を減らし、更新時の不整合を防ぐために表を分割して整理することです。 |
| 主キー | 表の1行を一意に特定できる項目です。例として受注表なら受注番号、商品表なら商品番号が該当します。 |
| 外部キー | 他の表の主キーを参照するための項目です。受注表の「商品番号」は商品表を参照するために使えます。 |
図表の読み取り方
見るべきポイント
-
同じ値が複数行に現れる項目があるかを確認します。
-
そのとき、同じ値に対して常に同じ値がセットで現れる項目があれば、関数従属があると考えます。
本問の読み取り結果
-
商品番号M0001が複数行に現れる
-
商品番号M0001に対して商品名と単価が常に同じ
このため、次の関係があると整理できます。
- 商品番号 → 商品名、単価
解くための手順
手順の全体像
-
元の表の項目を列挙します。
-
関数従属を整理します。
-
主キーに直接従属しない項目(別の項目に従属する項目)を別表に分離します。
-
分離後の表同士は、共通項目(この問題では商品番号)で関連付けます。
本問に当てはめた結果
-
商品表に入れる項目:商品番号、商品名、単価
-
受注表に残す項目:受注番号、発注者名、商品番号、個数
問題の解法手順
問題の表の項目を見て、どの項目がどのキーで一意に決まるかを整理します。
図表の読み取り
元の表の項目
-
受注番号
-
発注者名
-
商品番号
-
商品名
-
個数
-
単価
重複している情報
同じ商品番号(例:M0001)が複数行に出てくるため、商品名と単価が繰り返し記録されています。
解く手順
1. 受注番号で決まる項目を受注表へ
受注番号が決まると、次が決まります。
-
発注者名
-
商品番号
-
個数
よって受注表は次の構成が適切です。
- 受注表:受注番号、発注者名、商品番号、個数
2. 商品番号で決まる項目を商品表へ
商品番号が決まると、次が決まります。
-
商品名
-
単価
問題文に「同一商品で単価が異なるときは商品番号も異なる」とあるため、単価は商品番号に従属する項目として商品表に持たせられます。
よって商品表は次の構成が適切です。
- 商品表:商品番号、商品名、単価
3. 表同士を関連付ける
受注表に商品番号を含めることで、商品表の情報(商品名、単価)を参照できます。
以上に一致する選択肢は「エ」です。
選択肢ごとの解説
- ア:不正解
受注表に商品番号がないため、どの受注でどの商品を注文したかを記録できません。また、個数は受注ごとに変わる情報なので、商品表で管理すると正しく表せません。
- イ:不正解
個数が商品表に含まれていますが、個数は受注ごとに変わる情報です。商品番号が同じでも受注ごとに個数が異なるため、商品表に入れると整合が取れません。
- ウ:不正解
単価が受注表に含まれていますが、条件より単価は商品番号で一意に決まります。受注表に単価を残すと同じ商品番号で単価を重複して持つことになり、正規化の目的に反します。
- エ:正解
商品番号で一意に決まる商品名と単価を商品表にまとめ、受注ごとに変わる個数は受注表に残しています。商品番号で表同士を関連付けられるため、正規化後の構成として適切です。
まとめ
元の受注データでは、受注のたびに変わる情報(発注者名、商品番号、個数)と、商品ごとに決まる情報(商品名、単価)が同じ表に混在しています。正規化では、受注番号で決まる項目を受注表に、商品番号で決まる項目を商品表に分けます。その結果、受注表は「受注番号、発注者名、商品番号、個数」、商品表は「商品番号、商品名、単価」とするのが適切です。
テクノロジ系 > 技術要素 > データベース
受注表に商品番号がないため、どの受注でどの商品を注文したかを記録できません。また、個数は受注ごとに変わる情報なので、商品表で管理すると正しく表せません。
個数が商品表に含まれていますが、個数は受注ごとに変わる情報です。商品番号が同じでも受注ごとに個数が異なるため、商品表に入れると整合が取れません。
単価が受注表に含まれていますが、条件より単価は商品番号で一意に決まります。受注表に単価を残すと同じ商品番号で単価を重複して持つことになり、正規化の目的に反します。
商品番号で一意に決まる商品名と単価を商品表にまとめ、受注ごとに変わる個数は受注表に残しています。商品番号で表同士を関連付けられるため、正規化後の構成として適切です。