平成27年度 春期 午前Ⅱ 問2
データ操作
UMLに関する問題
図のデータモデルは会計取引の仕訳を表現している。“移動”がリンクする“勘定”の残高を増やす場合は金額の符号を正に,減らす場合は負にすることで,貸借平均の原理を表現する。このモデルに基づき,“勘定”表,“会計取引”表,“移動”表を定義した。勘定科目“現金”の2015年4月30日における残高を導出するためのSQL文はどれか。ここで,モデルの表記にはUMLを用い,表中の実線の下線は主キーを表す。また,“会計取引”表には今期分のデータだけが保持される。
データモデル:
[勘定] [会計取引]
勘定科目 取引番号
期首残高 2..* * 取引日
/残高 ─────────────────────────
┆(点線)
[移動]
金額
会計取引 に付いた注記: 制約:一つの会計取引につながる移動の金額の和はゼロであること。
勘定と会計取引が関連で結ばれ,多重度は勘定側が `2..*`,会計取引側が `*`。関連の線から点線で関連クラス“移動”(属性: 金額)がつながる。
表の定義(原典の実線の下線は …、破線の下線は〔破線の下線〕で表した):
勘定(勘定科目,期首残高)
会計取引(取引番号,取引日)
移動(勘定科目,取引番号,金額)
- アSELECT SUM(金額) AS 残高 FROM 勘定, 移動, 会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
- イSELECT 期首残高 + SUM(金額) AS 残高 FROM 勘定, 移動, 会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30' GROUP BY 勘定.勘定科目, 期首残高
- ウSELECT 残高 FROM 勘定, 移動, 会計取引 WHERE 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
- エSELECT 残高 FROM 勘定, 移動, 会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
答えと解説を見る
✓ これが正解イSELECT 期首残高 + SUM(金額) AS 残高 FROM 勘定, 移動, 会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30' GROUP BY 勘定.勘定科目, 期首残高
解説
期首残高に、4月30日までの移動の金額の合計を足して求めます。
勘定科目の残高は、期首の残高に、その日までに起きた増減を積み上げた値です。このモデルでは、残高を増やす移動は正、減らす移動は負の金額で記録されるので、4月30日までの移動の金額を合計すれば今期の増減がそのまま出ます。会計取引表には今期分だけが入っているので、取引日を2015年4月30日以前とする条件だけで今期の範囲になります。正解のSQLは、勘定・移動・会計取引を勘定科目と取引番号で結び、現金の行に絞り、SUM(金額)に期首残高を加えています。期首残高は集計関数の外に置く列なので、GROUP BYに勘定科目と期首残高を並べて取り出せるようにしています。図の/残高は他の値から導く属性で、表の列としては定義されていません。残高は期首残高と期中の移動の合計の和、という式をSQLに写せているかで見分けます。
ほかの選択肢はなぜ違うのか
- アSELECT SUM(金額) AS 残高…:移動の金額だけを合計しているので、4月30日までの今期の増減は出せても、期首残高が加わっていません。期首の時点で持っていた現金の分が抜けるため、残高としては足りない値になります。
- ウSELECT 残高 FROM 勘定, 移…:表定義に残高という列はなく、図の/残高は他の値から導き出す属性です。さらに三つの表を結ぶ条件が書かれていないため、行の組合せがすべて作られてしまい、現金の残高を求める形になっていません。
- エSELECT 残高 FROM 勘定, 移…:残高という列はどの表にも定義されていないので、この列を選ぶことはできません。会計取引表と移動表を結ぶ条件も抜けており、取引日による絞り込みが移動の行と対応しない形になっています。
この問題の用語
- 会計お金の動きを記録し、まとめて報告する仕事のことをいいます。在庫の評価のしかたなど、決められた方法に従って計算します。
出典:平成27年度 春期 データベーススペシャリスト試験 午前Ⅱ 問2
同じ用語が出る問題
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)