平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問2
設問2 〔会議室予約システムについての改良案〕について,(1)~(3)に答えよ。
(2) 図5中の④において,⑧に進む処理は,速やかに予約失敗を検知するために行っている。
この処理はどのような状況を想定して行っているか、20文字以内で述べよ。
〔会議室予約システムについての改良案〕
ダブルブッキングを防ぐために図4,表4の”日別予約管理”テーブルを追加し、予約処理内容を図5のように改良することを検討した。
図4 追加する”日別予約管理”テーブルのテーブル構造
④で⑧に進む処理とは
・①で予約処理中フラグを更新できていない
更新できない場合とは、
→対象となる会議室と予約日のデータは存在しない
(表4の概要の前程違反なので考えるべきではない)
→対象となる会議室と予約日のデータは存在し、予約処理中フラグが'Y'
つまり先行処理は、現在予約処理中であるということ。
そしてまだ③の処理中のときに、後続処理が①を実行したという想定
・③で結果がある場合
結果が取得できたということは、
→先行処理は、⑤⑥⑦とデータ登録を済ませ、専用ロック解除された。
それをさらに上書きしないように、予約失敗として、⑧へ進むわけである。
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問2
設問2 〔会議室予約システムについての改良案〕について,(1)~(3)に答えよ。
(2) 図5中の④において,⑧に進む処理は,速やかに予約失敗を検知するために行っている。
この処理はどのような状況を想定して行っているか、20文字以内で述べよ。
〔会議室予約システムについての改良案〕
ダブルブッキングを防ぐために図4,表4の”日別予約管理”テーブルを追加し、予約処理内容を図5のように改良することを検討した。
日別予約管理(会議室番号,予約日,予約処理中フラグ)
図4 追加する”日別予約管理”テーブルのテーブル構造
表4 追加する”日別予約管理”テーブルの概要
テーブル名 | 概要 |
---|---|
日別予約管理 | ・会議室予約テーブルへの登録の可否を判断するために用いる。 ・予約処理中フラグには,’Y’と’N’のいずれかが設定される。 ’Y’は予約処理中を表し、’N’は予約処理中でないことを表す。 ・予約受付対象の全ての会議室番号,予約日の組み合わせは, 予約処理中フラグの初期値を’N’としてあらかじめ登録されている。 |
① | 予約処理中フラグをUPDATE文で’Y’に更新する。更新できたか否かを記憶する。UPDATE 日別予約管理 SET 予約処理中フラグ = 'Y' WHERE 会議室番号 = :hv4 AND 予約日 = :hv1 AND 予約処理中フラグ='N' |
② | コミットする。 |
③ | 指定された条件に予約が入っているかをSELECT文で確認する。SELECT * FROM 会議室予約 WHERE 会議 = :hv4 AND 予約日 = :hv1 AND 予約開始時刻 b :hv3 AND 予約終了時刻 c :hv2 |
④ | ①で予約処理中フラグを更新できており,③で結果行がない場合は,⑤に進む。 ①で予約処理中フラグを更新できており,③で結果行がある場合は,予約失敗 として⑥に進む。 ①で予約処理中フラグを更新できておらず,③で結果行がない場合は,①に戻る。 ①で予約処理中フラグを更新できておらず,③で結果行がある場合は,予約失敗 として⑧に進む。 |
⑤ | 指定された条件の予約をINSERT文で登録して、予約成功とする。INSERT INTO 会議室予約(会議室番号,予約日,予約開始時刻,予約終了時刻,社員番号) VALUES(:hv4,:hv1,:hv2,:hv3,:hv5) |
⑥ | 予約処理中フラグをUPDATE文で’N’に更新する。UPDATE 日別予約管理 SET 予約処理中フラグ = 'N' WHERE 会議室番号 = :hv4 AND 予約日 = :hv1 |
⑦ | コミットする。 |
⑧ | 予約の成否を通知する。 |
図5 予約処理内容改良案
④で⑧に進む処理とは
・①で予約処理中フラグを更新できていない
更新できない場合とは、
→対象となる会議室と予約日のデータは存在しない
(表4の概要の前程違反なので考えるべきではない)
→対象となる会議室と予約日のデータは存在し、予約処理中フラグが'Y'
つまり先行処理は、現在予約処理中であるということ。
そしてまだ③の処理中のときに、後続処理が①を実行したという想定
・③で結果がある場合
結果が取得できたということは、
→先行処理は、⑤⑥⑦とデータ登録を済ませ、専用ロック解除された。
それをさらに上書きしないように、予約失敗として、⑧へ進むわけである。
【回答】
予約処理が重なり、先行処理が予約登録した(、を含め20文字)
予約処理が重なり、先行処理が予約登録した(、を含め20文字)
コメント
コメントを投稿