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


[出典:ITパスポート試験 令和6年度 問81]
スポンサーリンク
正解
正解は「エ」です。
解説
データの正規化では、受注情報と商品情報を適切に分割することが重要です。選択肢エの構成では、「受注番号、発注者名、商品番号、個数」と「商品番号、商品名、単価」に分割されており、冗長なデータを排除し、データの整合性を維持できます。したがって、選択肢エが正解です。
正規化のポイント:
- データの重複(冗長性)
同じ商品番号「M0001」が複数の受注に登場しており、それぞれ異なる単価が設定されています。単価が変わる可能性があるため、商品ごとに単価を別表に分ける必要があります。 - データの整合性の維持
商品名や単価の変更があった場合、すべてのレコードを更新する必要が生じます。これを避けるために、商品情報を別の表に分離し、参照する形にすると管理がしやすくなります。 - データの一貫性の確保
商品番号ごとに商品名が同じであるべきですが、誤ったデータ入力により不整合が生じるリスクがあります。別表に分割して、商品番号を主キーとすることで一貫性を確保できます。
選択肢「エ」は、以下のようにデータを適切に分割しています。
- 受注テーブル(注文情報)
- 受注番号
- 発注者名
- 商品番号
- 個数
- 商品テーブル(商品情報)
- 商品番号
- 商品名
- 単価
この分割方法により:
- 受注テーブルでは、顧客がどの商品を注文したのか、何個注文したのかを管理します。
- 商品テーブルでは、商品ごとの名称や単価を一元管理できます。
正規化の効果:
- データの一貫性が保たれる → 商品名や単価を商品番号で一意に管理できる。
- 冗長性の削減 → 同じ商品名を複数回記録する必要がなくなる。
- 更新が容易 → 商品単価を一箇所で管理できるため、変更時の影響範囲を最小限に抑えられる。
ア(受注番号, 発注者名 商品番号, 商品名, 個数, 単価):
受注データに「単価」を含めたままであるため、同じ商品番号が異なる単価で登録される可能性があり、整合性が取れません。
イ(受注番号, 発注者名, 商品番号 商品番号, 商品名, 単価):
「商品情報(商品名、単価、個数)」を同じ表で管理しているため、商品情報の更新時に問題が生じる可能性があります。
ウ(受注番号, 発注者名, 商品番号, 個数, 単価 商品番号, 商品名):
受注データに単価が含まれているため、同じ商品で異なる単価がある場合に対応できません。
難易度
普通
データベースの正規化についての基本的な理解が求められる問題ですが、受注情報と商品情報の分離を正しく理解できれば解答しやすいため、難易度は普通としました。
スポンサーリンク
用語補足
正規化:
データの重複や冗長性を排除し、データの整合性を確保するためのデータベース設計手法です。例えば、同じ商品名が異なる表に存在することを防ぎます。
関係データベース:
表形式(リレーショナルモデル)でデータを管理するデータベースのことで、SQLなどを用いて操作を行います。
対策
- 正規化の各段階(第1正規形、第2正規形、第3正規形)を理解し、受注情報や商品情報の分離を適切に行えるよう練習しましょう。