IPA過去問ドリル

平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2

テクノロジ/データベース

図のデータモデルは会計取引の仕訳を表現している。“移動”がリンクする“勘定”の残高を増やす場合は金額の符号を正に,減らす場合は負にすることで,貸借平均の原理を表現する。このモデルに基づき,“勘定”表,“会計取引”表,“移動”表を定義した。勘定科目“現金”の2017年4月30日における残高を導出するためのSQL文はどれか。ここで,モデルの表記にはUMLを用い,表中の実線の下線は主キーを表す。また,“会計取引”表には今期分のデータだけが保持される。 〔データモデルの概要〕 “勘定”(勘定科目,期首残高,/残高)と“会計取引”(取引番号,取引日)は,“移動”(勘定科目,取引番号,金額)を介して関連付けられる。“勘定”側の多重度は2..*,“会計取引”側の多重度は*である(一つの勘定は二つ以上の会計取引の移動に対応し,一つの会計取引には複数の勘定への移動が対応する)。制約:一つの会計取引につながる移動の金額の和はゼロであること。 〔表定義〕 勘定(勘定科目,期首残高) 会計取引(取引番号,取引日) 移動(勘定科目,取引番号,金額) (注:本サイトでは原問題の図を文字表記に変換しています)

出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2

正解:イ

解説

“勘定”表がもつ“残高”は,図のモデルでは “/残高” と記されており,UMLの表記で先頭に“/”が付く属性は,他のデータから算出される導出属性(実際には格納されない値)であることを表します。したがって,残高を求めるSQL文では,実表として存在する“期首残高”に,該当勘定への“移動”の金額の合計を加算する必要があります。イのSQL文は,期首残高とSUM(金額)を加算し,勘定科目と期首残高でGROUP BYすることで,正しく“現金”勘定の残高を導出しています。

選択肢ごとの解説

  • 誤り。SUM(金額)だけを残高としており,期首残高が加算されていません。期首残高を考慮しないと,2017年4月30日時点の正しい残高にはなりません。
  • 正しい。期首残高とSUM(金額)を加算し,勘定科目・期首残高でグループ化することで,期首残高に取引日までの移動金額の合計を足し合わせた,正しい残高を導出できます。
  • 誤り。“残高”は“/残高”として表記された導出属性であり,実際には“勘定”表に格納されているデータではないため,SELECT 残高 として直接取得することはできません。また,各表の結合条件も指定されていません。
  • 誤り。ウと同様に,“残高”は格納されていない導出属性のため直接SELECTできません。さらに,会計取引と移動の結合条件(取引番号の一致)も指定されておらず,正しい集計になりません。
データベーススペシャリストの過去問を演習モードで解く