本文へスキップ

平成21年度 秋期 ITパスポート試験 問100

この問題の解説と、これまでの解答の記録です。

問100
頻出度★★★

I社は,企業に対してPC関連機器の販売を行っており,販売管理業務の情報をデータベースによって管理している。図1に示すデータベースとデータベース管理システムの印刷機能を使って,販売時に図2の請求書を発行する。 各商品の販売単価は適宜変更され,新たな販売単価とその更新日時が販売単価表の該当レコードに上書きされる。また,取引を行う企業(以下,取引先という)の担当者は原則1人であるが,取引先によっては部署ごとに1人存在することがある。取引先コードは,取引先ごとに採番する。 **図1 販売管理業務に関するデータベースの構造** 商品表

商品コード商品名分類コードメーカコード仕入先コード

販売単価表

商品コード販売単価更新日時

取引先表

取引先コード取引先名

取引先担当者表

取引先コード部署名所在地名前役職電話番号

**図2 請求書の様式** - 表題: 請求書 - 右上: 平成YY年MM月DD日 - 宛先欄 (左側): - [取引先名] [部署名] - [役職] [名前]様 - [所在地] [電話番号] - 本文: 下記のとおりご請求申し上げます。 - 発行者欄 (右側): 東京都文京区本駒込×丁目××番×号/株式会社 I - 右側: 伝票番号 XXXXXXXXXX - 明細表 (見出し行のみ。データ行は空欄):

商品コード商品名数量単価金額

- 合計欄 (明細表の下部。「合計」の行に「税抜」「消費税」「総額」の見出しがあり,その下の値セルは空欄):

合計税抜消費税総額

図2の請求書を表として記録することになった。請求書の表を作成するに当たり,伝票番号,日付,取引先コード,部署名,商品コード,数量,単価の七つの項目を記録することにした。これらの項目を正規化して記録するとき,表の構成として適切なものはどれか。

  • 1つの表
    伝票番号日付取引先コード部署名商品コード数量単価
  • 表1
    伝票番号日付取引先コード部署名/ 表2:商品コード数量単価
  • 表1
    伝票番号日付取引先コード部署名/ 表2:伝票番号商品コード数量単価
  • 表1
    伝票番号日付/ 表2:取引先コード部署名/ 表3:商品コード数量単価
出典 平成21年度 秋期 ITパスポート試験 問100
解説

問 100正規化の第一歩は繰返し項目(明細行)を別表に切り出すこと

  • 不正解ア

    7項目すべてを1つの表にまとめており、明細行が複数ある請求書では同じ伝票番号・日付・取引先コード・部署名を行数分だけ重複して持つことになる。繰返し項目が分離されておらず正規化されていないうえ、更新時の不整合(更新異常)を招く。

  • 不正解イ

    明細部分を切り出した点はよいが、明細表〔商品コード、数量、単価〕に伝票番号がないため、どの明細行がどの伝票に属するのかを特定できない。表を結合して元の請求書を復元できず、分割の仕方として不適切である。

  • ウ

    正解 請求書1枚には、伝票番号・日付・取引先コード・部署名という「1枚に1つだけ決まる項目」と、商品コード・数量・単価という「明細行の数だけ繰り返される項目」が混在している。正規化ではまずこの繰返し部分を切り離して別の表にする(第1正規形)。ウは伝票ヘッダ表〔伝票番号、日付、取引先コード、部署名〕と明細表〔伝票番号、商品コード、数量、単価〕に分割している。明細表が伝票番号を持つことで「どの伝票の明細か」をたどれ、明細表の主キーは〔伝票番号+商品コード〕、伝票番号は伝票ヘッダ表への外部キーとして機能する。分割しても元の請求書を復元でき、日付や取引先コードの重複記録もなくなるので、ウが適切である。

  • 不正解エ

    伝票番号と日付、取引先コードと部署名、明細の3表に分けているが、いずれの表にも他表と結び付けるキーが不足している。取引先コード・部署名がどの伝票のものか、明細がどの伝票のものかをたどれず、やはり元の請求書を復元できない。分割し過ぎて関連が切れてしまった例である。

ここがポイント
  • 正規化の第一歩は繰返し項目(明細行)を別表に切り出すこと。伝票のヘッダ部と明細部を分けるのが基本形。
  • 表を分割したら、切り出した側に元の表を指す項目(外部キー、ここでは伝票番号)を必ず残す。これがないと結合できず元データを復元できない。
用語

解答の記録