平成30年秋期 問3 データベース

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
rさん  
(No.1)
問3データベースの設問2について、理解できない点があります。分かる方教えていただけないでしょうか。

①「販売できない席」を求めるには販売表の行を全て出力しないといけないのでLEFT OUTER
  →なぜ、、、?

②「決済を過ぎた場合、購入申し込みが取り消しになり、決済表.決済額は-1になる。これは販売できない席には入らないので a2は決済額>=0」
  →なぜ販売できない席に入らないのでしょうか?決済されない場合は席が復活(申し込み可)になるのでしょうか?そのような記述は問題文にないと思うのですが…。「チケットって普通そうでしょ」って感じなんですかね。
2022.10.27 01:01
AP受かりたいマンさん 
(No.2)
まず販売表と決済表にあるものをそれぞれ比較してみたいと思います。
販売表
・申し込んでまだ決済をしていないが決済期限日を過ぎていないレコード
・申し込んで決済も済んだレコード
・申し込んだが決済を行わず、決済期限日を過ぎて申し込みを取り消されたレコード

決済表
・申し込んで決済も済んだレコード
・申し込んだが決済を行わず、決済期限日を過ぎて申し込みを取り消されたレコード
(決算日=NULLかつ決算日=-1)

設問2では販売できない席数を出力したいのでそれぞれの表の要素で
カウントするべきレコードを考えてみます。
販売表の申し込んでまだ決済をしていないが決済期限日を過ぎていないレコードと
申し込んで決済も済んだレコードは必要で、逆に言えば
申し込んだが決済を行わず、決済期限日を過ぎて申し込みを取り消されたレコードは
不要という事になります。

まずは結合条件から考えてみます。
LEFT OUTER JOIN以外の結合だと販売表にだけ存在する
申し込んでまだ決済をしていないが決済期限日を過ぎていないレコードが
除外されてしまいます。何故なら決算表にはその要素が存在しないからです。
次に3種類の要素のうち、必要な2要素だけを抽出する方法を考えてみます。
まず、申し込んでまだ決済をしていないが決済期限日を過ぎていないレコードですが
決算表に存在しないレコードなのでLEFT OUTER JOINで
決済表.決済額にはNULLが入っているはずです。
なので条件1には決済額=NULLが入ります。
次に決済まで終了してしまったレコードですが、
決済額が入力されているはずなので0以上の値が入っているはずです。
ここで0より大きいではなく0以上にしているのは
設問4のポイントシステムで決済額が0円になるケースがあるからだと思われます。

基本情報の21年以降のDBの問題だと一番難しい問題かもしれないですね。
予約の取り消しの解釈違いは正直説明されていないのでどうしようもない気がします。
2022.10.27 23:12
自分も悩みましたさん 
(No.3)
この投稿は投稿者により削除されました。(2022.10.30 00:37)
2022.10.30 00:37
rさん  
(No.4)
回答ありがとうございます!理解出来ました。
この年は難しいですね;  チケット復活可否のところはもう仕方ないですね・・・。
2022.10.30 12:09

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop