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

問2

図のデータモデルは会計取引の仕訳を表現している。"移動"がリンクする"勘定"の残高を増やす場合は金額の符号を正に,減らす場合は負にすることで,貸借平均の原理を表現する。このモデルに基づき,"勘定"表,"会計取引"表,"移動"表を定義した。勘定科目"現金"の2017年4月30日における残高を導出するためのSQL文はどれか。ここで,モデルの表記にはUMLを用い,表中の実線の下線は主キーを表す。また,"会計取引"表には今期分のデータだけが保持される。
02.png/image-size:346×127
 勘定(勘定科目,期首残高)
 会計取引(取引番号,取引日)
 移動(勘定科目取引番号,金額)
  • 02a.png/image-size:398×77
  • 02i.png/image-size:398×92
  • 02u.png/image-size:398×45
  • 02e.png/image-size:398×61
  • [出題歴]
  • データベース H27春期 問2

分類

テクノロジ系 » データベース » データ操作

正解

解説

"勘定"の属性名"残高"は、先頭に"/"(スラッシュ)が付いていて導出属性であることを示しています。導出属性とは、"注文"に対する"合計金額"のように既存の属性から論理的に導き出せる属性です。

選択肢のSQL文ですが、まず"残高"がその都度計算によって導出されるという性質から、計算を行わずにどの表にも存在しない"残高"の値を直接表示しようとしている「ウ」および「エ」は誤りとわかります。また勘定科目のある時点での残高は、期首残高に期首からその時点までの移動の金額を加減したものです。「ア」はSUM()によって移動金額の合計を算出していますが、期首残高が足されていないため表示される値は単に取引の通算収支になってしまいます。

「イ」のSQLでは3つの表を結合した後、"勘定科目"が現金かつ"取引日"が2017年4月30日以前の行を抽出しています。この操作によって期首から2017年4月30日までに行われた現金の取引記録が全て抽出されます。さらにGROUP BY句で移動金額を集計するための"勘定科目"およびSELECT句で指定するための"期首残高"でグループ化を行います。最後にSELECT句で"期首残高"と移動金額の合計"SUM(金額)"を合算すれば2017年4月30日における残高が導出できます。
02_1.png/image-size:505×847
© 2016-2024 データベーススペシャリストドットコム All Rights Reserved.

Pagetop