本文へスキップ

平成26年度 秋期 ITパスポート試験 問99

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

問99
頻出度★★☆

広告代理店の A 社では,申請者が経理部に回付した交通費精算伝票(以下,伝票という)を使って,顧客訪問時に発生した交通費の精算業務を行っている。 〔現在の交通費精算業務の流れ〕 (1)申請者は,伝票に申請者名,社員番号,経費科目,顧客番号,利用日,利用区間,金額及び合計金額を記入する。押印後,事務担当者に回付する。 (2)事務担当者は,申請内容を精査し,誤りがなければ伝票を承認者に回付する。誤りがあれば,伝票を申請者に差し戻す。 (3)承認者は,承認又は否認の決裁を行う。内容が適切であった場合には承認して,事務担当者に回付する。内容が適切でなければ否認して,申請者に差し戻す。 (4)(2)又は(3)で差し戻された場合,申請者は伝票を修正し,再度事務担当者に回付する。 (5)事務担当者は,承認者から回付された当日分の承認済み伝票を取りまとめ,伝票番号を採番し,経理部に回付する。 (6)経理担当者は,事務担当者から回付されてきた承認済み伝票の支払処理を行う。 交通費精算を効率よく行うために,データベースを活用して,次に示す機能要件の交通費精算システム(以下,精算システムという)を構築することにした。 〔精算システムの機能要件の一部〕 (1)社員番号でログオンする。社員番号によって,社員表から申請者名を抽出し,申請画面の共通項目として設定する。 (2)申請画面の明細として,顧客番号,利用日,利用区間と金額を入力する。1回の申請で複数の顧客訪問に対する明細が入力できる。また,合計金額の算出,経費科目の設定及び伝票番号の自動採番を行う。ここで経費科目として,交通費を自動設定する。 (3)申請後,事務担当者が精査を行い,自動的に承認者に通知が行く。承認者は決裁画面で承認か否認かを選択する。 (4)支払画面で承認済み申請を社員ごとに集計し,支払金額を算出する。 精算システムのデータベースを使って,図1に示す顧客別社員別交通費実績表(以下,実績表という)を作成することにした。実績表を作成する手順として,dに入れる適切なものはどれか。ここで,実績表に出力する伝票は,申請日が前月であり,かつ,承認区分が“承認”のものとする。 また,精算システムで利用される表は図2のとおりである。 〔実績表の作成手順〕 (1)精算表から,申請日が前月かつ承認区分が“承認”のデータを抽出する。 [ d ] (4)(3)の表と社員表と顧客表を結合して,顧客名と社員名を取得する。 図1 顧客別社員別交通費実績表の例

顧客番号顧客名社員番号社員名金額
000100B商事2005123田中太郎2,500
000100B商事2006211鈴木太郎4,300

図2 精算システムで利用される表 精算表

伝票番号申請日社員番号承認区分

明細表

伝票番号明細番号顧客番号利用日利用区間金額

社員表

社員番号社員名

顧客表

顧客番号顧客名住所電話番号

注記 主キーは表示していない。

出典 平成26年度 秋期 ITパスポート試験 問99
解説

問 99

  • ア

    正解 求めたいのは図1の「顧客別社員別」交通費実績表、つまり顧客と社員の組合せ1つにつき1行、金額はその合計という表です。ここで必要な列がどの表にあるかを図2で確認します。金額と顧客番号は明細表だけにあり、社員番号は精算表だけにあります。つまり片方の表だけを見ていても「どの顧客に、どの社員が、いくら使ったか」は分かりません。そこで(2)では、手順(1)で絞り込んだ精算表(前月申請かつ承認済み)と明細表を、両表に共通する伝票番号で結合します。これで1行の中に社員番号・顧客番号・金額がそろいます。続く(3)では、その結合結果に対して顧客番号と社員番号が同一のものごとに金額を合計し、顧客番号・社員番号・合計金額の表を作ります。これが図1の粒度そのものです。最後の(4)で、この表に社員表と顧客表を結合して社員名と顧客名という名称を補えば図1が完成します。(4)が「顧客名と社員名を取得する」と書かれていることが決め手で、(3)の表には顧客番号と社員番号の両方が残っていなければ名称を引けません。この条件を満たすのはアだけです。

  • 不正解イ

    (2)の結合までは正しいものの、(3)で顧客番号だけを集計キーにしているため、社員番号が集計で消えてしまいます。その結果できるのは「顧客別」の合計表であり、社員ごとの内訳がありません。手順(4)で社員表と結合して社員名を取得しようにも、結合の手掛かりとなる社員番号が残っていないため実行できず、図1のように同じ顧客000100が社員ごとに2行に分かれる形も作れません。

  • 不正解ウ

    イと逆に、(3)で社員番号だけを集計キーにしているため顧客番号が失われます。できるのは「社員別」の合計表で、顧客ごとの内訳がありません。手順(4)で顧客表と結合して顧客名を取得することができず、「顧客別社員別」という求められた集計粒度を満たしません。

  • 不正解エ

    手順が2重に破綻しています。まず(2)で明細表だけから顧客番号と社員番号の組合せで集計しようとしていますが、図2のとおり明細表に社員番号という列は存在しないため、この集計自体ができません。さらに仮にできたとしても、集計によって伝票番号は表から消えるので、(3)で(1)の表と伝票番号で結合することも不可能です。加えて、先に集計してから前月・承認済みの絞り込みを行う順序では、対象外の伝票の金額まで合計に混ざってしまいます。

ここがポイント
  • 関係データベースの基本操作である結合(join)・選択(selection)・射影(projection)の使い分け。複数の表に分かれた列を1行にまとめるには共通の列(ここでは伝票番号)による結合が必要で、集計はその結合後に行う。
  • 集計(グループ化)のキーは、最終的に出力したい表の粒度と一致させる。「顧客別社員別」なら顧客番号と社員番号の組合せがキーであり、集計キーに含めなかった列は表から失われて後続の結合に使えなくなる。
用語

解答の記録