平成30年度 春期 ITパスポート試験 公開問題 問81 解説 データベースの正規化
顧客名と住所,商品名と単価,顧客が注文した商品の個数と注文した日付を関係 データベースで管理したい。正規化された表として,適切なものはどれか。ここで, 下線は主キーを表し,顧客名や商品名には,それぞれ同一のものがあるとする。
- ア. ✓ 正答
- イ.
- ウ.
- エ.
解説
この問題を解くためのポイントは、データの重複を排除する正規化の考え方と、エンティティ(実体)の関係性を理解することです。具体的には、以下の3つのテーブルに分けるのが正解となります。
- 顧客に関する情報をまとめる(顧客表)
- 商品に関する情報をまとめる(商品表)
- 顧客がいつ、どの商品を注文したかという取引情報をまとめる(注文表)
このとき、顧客表と商品表の主キーを、注文表の中に外部キーとして持たせることで、それぞれの情報を一意に結びつけることができます。
正規化の目的は、データの整合性を守り、無駄な重複をなくすことにあります。もし、注文表の中に顧客名や商品名を直接入力してしまうと、同じ顧客が何度も注文するたびに名前を入力することになり、表記ゆれが発生したり、住所を変更する際に複数の箇所を修正しなければならなくなるなど、不都合が生じます。
この問題のように、顧客・商品・注文という異なる性質の情報がある場合は、それぞれの情報だけで構成されるテーブルを作成し、関係性の管理はID(主キー)で行うのが原則です。
選択肢を検討する際、特に重要なのが「主キーで特定できるか」という点です。顧客名や商品名には同一のものがある可能性があるため、これらを主キーにするのは不適切です。そのため、顧客番号や商品番号といった、唯一無二の値を主キーとして定義しているアが、データの正規化の観点から最も適切と言えます。
データベースを設計する際は、常に「この項目はどこに配置するのが最も自然か」「別のテーブルのデータを繰り返し入力していないか」を考える癖をつけることが重要です。実務においても、この正規化のプロセスを経て作成されたデータベースは、保守性が高く、トラブルの少ないシステム構築に直結します。
- データベース設計の基本:正規化(わかりやすい解説)