平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問2
設問2 〔会議室予約システムについての改良案〕について,(1)~(3)に答えよ。
(3) 〔会議室予約システムについての改良結果〕で述べている〔会議室予約システムについての改良案〕で生じる問題について,どのテーブルがどのような状態になるのかを40字以内で述べよ。また,それによって引き起こされる問題を30字以内で述べよ。
〔会議室予約システムについての改良案〕
ダブルブッキングを防ぐために図4,表4の”日別予約管理”テーブルを追加し、予約処理内容を図5のように改良することを検討した。
図4 追加する”日別予約管理”テーブルのテーブル構造
〔会議室予約システムについての改良結果〕
図5の⑤~⑦の実行時に,ディスク容量不足などのエラーが発生して,予約処理のトランザクションが中断してしまうと問題が生じることが分かったので,〔会議室予約システムについての改良案〕は不採用とし,”会議室予約”テーブルを図6のように変更した。
図6 変更した”会議室予約”テーブルのテーブル構造
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf
問2
設問2 〔会議室予約システムについての改良案〕について,(1)~(3)に答えよ。
(3) 〔会議室予約システムについての改良結果〕で述べている〔会議室予約システムについての改良案〕で生じる問題について,どのテーブルがどのような状態になるのかを40字以内で述べよ。また,それによって引き起こされる問題を30字以内で述べよ。
〔会議室予約システムについての改良案〕
ダブルブッキングを防ぐために図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 予約処理内容改良案
〔会議室予約システムについての改良結果〕
図5の⑤~⑦の実行時に,ディスク容量不足などのエラーが発生して,予約処理のトランザクションが中断してしまうと問題が生じることが分かったので,〔会議室予約システムについての改良案〕は不採用とし,”会議室予約”テーブルを図6のように変更した。
会議室予約(会議室番号,予約日,予約開始時刻,予約終了時刻,社員番号,予約済みフラグ)
図6 変更した”会議室予約”テーブルのテーブル構造
「予約処理のトランザクションが中断してしまう」とは、本来①から⑧の処理を実行する想定で
あったものが、途中で処理続行できなくなり、ロールバックすること。
トランザクションの性質の原子性(atomicity)から、
①エラーになったとすれば、そもそもなにも行われていない状態でるので問題はない。
⑤あるいは⑥でエラーとなった場合、いずれも⑤も⑥も行われなかったことになるが、
①の処理は、コミット済みなので、取り消されることはない。
これが問題である。
【解答】
どのテーブルがどのような状態になるのか
日別予約管理テーブルのエラー発生時の予約の予約処理中フラグが'Y'となる。(37文字)
それによって引き起こされる問題
エラー発生時の予約に対する予約処理は、無限ループとなる。(28文字)
コメント
コメントを投稿