スキップしてメイン コンテンツに移動

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ 問2 設問1 (2)


平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf

問2

 設問1 会議室予約システムについて,(1)~(4)に答えよ。

 (2) 図3中の②は,行が挿入できないことでダブルブッキングとならないように制御している。
   その制御で行が挿入できない理由を30字以内で述べよ。


〔会議室予約システムのテーブル〕

 会議室予約システムの主要なテーブルのテーブル構造,概要は,図1,表1のとおりである。


 社員(社員番号,社員氏名,…)

 会議室(会議室番号,収容可能人数,階数,プロジェクタ設置有無,TV会議設備設置有無,…)

 会議室予約(会議室番号予約日予約開始時刻,予約終了時刻,社員番号


図1 主要なテーブルのテーブル構造(一部省略)


表1 主要なテーブルの概要

テーブル名概要
社員・社員の情報を管理する。社員番号で社員を一意に識別する。
会議室・会議室の情報を管理する。会議室番号で会議室を一意に識別する。
・会議室ことに収容可能な人数,階数,設備の設置有無が設定されている。
会議室予約・会議室の予約状況を管理する。会議室番号,予約日,予約開始時刻で
会議室予約を一意に識別する。
・予約開始時刻及び予約終了時刻の分の指定は00分または30分とする。



〔会議室予約システムでの予約処理〕

 会議室予約システムの予約内容は,図3のとおりである。
 なお,図3中のホスト変数のhv1は指定予約日,hv2は指定予約開始時刻,hv3は指定予約開始終了時刻,hv4は指定会議室番号,hv5は予約者の社員番号を表す(以降の図5,図7でも同様とする)。



 ① 指定された条件に重なる予約が入っているかをSELECT文で確認する。結果行がある場合,
  予約失敗として③に進む。結果行がない場合,②に進む。

 SELECT * FROM 会議室予約 WHERE 会議室番号 = :hv4 AND 予約日 = :hv1
   AND 予約開始時刻  b  :hv3 AND 予約終了時刻  c  :hv2

 ② 指定された条件の予約をINSERT文で登録する。行が挿入できた場合,予約成功として
  コミットし,③に進む。行が挿入できなかった場合,予約失敗として③に進む。

  INSERT INTO 会議室予約(会議室番号,予約日,予約開始時刻,予約終了時刻,社員番号)
  VALUES(:hv4,:hv1,:hv2,:hv3,:hv5)

 ③ 予約の成否を通知する。



図3 予約処理内容


ロックに関することが書かれているのは

〔RDBMSのトランザクション制御〕

 会議室予約システムで使用するRDBMSのトランザクションのISOLATIONレベルは
READ COMMITTEDであり,行単位でロックをかける。データ参照時には共有ロックをかけ,
参照終了時に解放する。データ更新時には専有ロックをかけ,トランザクション終了時に
解放する。専有ロックがかかっている間,他のトランザクションからの対象行の参照,更新は
専有ロックの開放待ちとなる。

 これまで、「占有ロック」という単語を何度も見かけたが、ここの解説には、「専有ロック」と
あるので、こちらに合わせた回答とする。

【回答】

登録時に専有ロックをかけ、対象行の参照・登録を抑止するため。(30文字)

コメント