平成21年度 秋期 ITパスポート試験 問100 解説 データベースの正規化
問100 図2の請求書を表として記録することになった。請求書の表を作成するに当たり, 伝票番号, 日付, 取引先コード, 部署名, 商品コード, 数量, 単価の七つの項目を 記録することにした。これらの項目を正規化して記録するとき, 表の構成として適 切なものはどれか。
- ア.
- イ.
- ウ. ✓ 正答
- エ.
解説
請求書のように、1枚の伝票に複数の商品明細が含まれるデータをデータベース化する場合、データが重複しないように「ヘッダ(伝票全体の情報)」と「明細(商品ごとの情報)」の2つの表に分けるのが基本です。正解は、伝票番号を共通のキーとして両方の表に持たせている「ウ」となります。
正規化で考えるデータの持ち方
データベースの正規化とは、データの重複を省き、矛盾なく効率的にデータを管理するための手法です。請求書をそのまま一つの表に記録しようとすると、同じ伝票番号や日付が商品行の数だけ繰り返されてしまい、データの無駄(冗長性)が生じます。
これを避けるために、以下の2つのグループに分けて考えます。
- 伝票ヘッダ:伝票番号ごとに1回だけ記録される情報(日付、取引先コード、部署名など)
- 伝票明細:伝票番号の中に複数存在しうる情報(商品コード、数量、単価など)
このとき、明細側の表にも「伝票番号」を含めることで、どの明細がどの伝票に属しているかを特定できるようになります。これがデータベースにおける「リレーション(関連付け)」の基本です。
なぜ他の選択肢ではいけないのか
選択肢アのようにすべての項目を1つの表に入れると、商品が増えるたびに日付や取引先などの情報がコピーされ、記憶領域の無駄になります。また、修正が必要になった際に複数の箇所を書き換える手間が生じ、書き換え漏れによる「更新時異常」のリスクが高まります。
選択肢イは、明細側の表に伝票番号がないため、その明細がどの伝票のものか判別できなくなってしまいます。選択肢エは、日付や取引先などの情報が細切れになりすぎており、システム上の処理が複雑になるため、このケースでは適切ではありません。
業務システムにおけるデータベース設計の重要性
この問題は、単なる知識の暗記ではなく、実際の業務システムでどのように情報を構造化すべきかという視点を問うています。
例えば、販売管理システムを作る際、請求書をそのままExcelの表のように設計してしまうと、あとから「取引先の部署名が変わった」という場合に、過去の全伝票データを検索して書き換える必要が出てきます。もし1か所でも書き換えを忘れると、データに矛盾が生じてしまいます。
このように情報を適切に分割(正規化)しておくことは、データの整合性を保ち、システムの保守性を高めるためにエンジニアが必ず行う重要なプロセスです。ITパスポートで学ぶ正規化の概念は、業務で扱う帳票やデータ構造を理解するための基礎教養となります。