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

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

平成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 追加する”日別予約管理”テーブルのテーブル構造


表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文字)

コメント

このブログの人気の投稿

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

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf 問2  設問1 会議室予約システムについて,(1)~(4)に答えよ。  (1) 図2中のSQL文の  a  ~  c  に入れる適切な字句を答えよ。 〔会議室予約システムのテーブル〕  会議室予約システムの主要なテーブルのテーブル構造,概要は,図1,表1のとおりである。  社員( 社員番号 ,社員氏名,…)  会議室( 会議室番号 ,収容可能人数,階数,プロジェクタ設置有無,TV会議設備設置有無,…)  会議室予約( 会議室番号 , 予約日 , 予約開始時刻 ,予約終了時刻, 社員番号 ) 図1 主要なテーブルのテーブル構造(一部省略) 表1 主要なテーブルの概要 テーブル名 概要 社員 ・社員の情報を管理する。社員番号で社員を一意に識別する。 会議室 ・会議室の情報を管理する。会議室番号で会議室を一意に識別する。 ・会議室ことに収容可能な人数,階数,設備の設置有無が設定されている。 会議室予約 ・会議室の予約状況を管理する。会議室番号,予約日,予約開始時刻で 会議室予約を一意に識別する。 ・予約開始時刻及び予約終了時刻の分の指定は00分または30分とする。 〔会議室予約システムでの検索〕  会議室予約システムで空き会議室の検索結果一覧を表示する際に必要な情報を得るために実行するSQL文の例を図2に示す。  なお,図2中のホスト変数のhv1は予約希望日,hv2は予約希望開始時刻,hv3は予約希望終了時刻を表す。 SELECT * FROM 会議室 X WHERE  a  (SELECT * FROM 会議室予約 Y WHERE X.会議室番号 = Y.会議室番号 AND Y.予約日 = :hv1 AND Y.予約開始時刻  b  :hv3 AND Y.予約終了時刻  c  :hv2) 図2 検索で実行するSQL文の例 図2のSQLから、判明できることは、 対象となる...

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

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf 問3 テーブルの設計及びSQLの設計に関する次の記述を読んで,設問1~3に答えよ。  設問3 〔注文トランザクションの設計〕について,(1),(2)に答えよ。  (1) 次のTR1~TR4のうち,いずれか二つの組合せのトランザクションを同時に実行したとき,デッドロックが起こるおそれがある。次の表中の  ウ  ~  カ   にデッドロックが起きない組合わせには○を,起きるおそれがある組合わせには×を記入せよ。   TR1:単品商品2個を注文する。   TR2:単品商品1個とセット商品1個を注文する。   TR3:セット商品1個を注文する。   TR4:セット商品2個を注文する。 \ TR1 TR2 TR3 TR4 TR1 ○  ウ   エ  × TR2 \ × × × TR3 \ \  オ   カ  TR4 \ \ \ × 問題の対象となっているのは、以下の内容である。 〔注文トランザクションの設計〕  Fさんは,注文トランザクションについて,次のように設計した。 (1) 注文単位を一つのトランザクションで処理し,最後にCOMMIT文を発行する。 (2) 注文に基づいて,”注文”テーブル及び”注文明細”テーブルに行を挿入する。 (3) 商品については,商品一覧画面に表示された順番に”在庫”テーブルの  引当可能数を調べ,引当可能ならば注文数を減算した値で引当可能数を更新する。 (4) セット商品が在庫不足のとき,”在庫”テーブルの不足セット商品数に不足数を  加算する。”セット商品構成”テーブルから,主キー順に当該セット商品を構成する  単品商品の構成数を調べ,必要数を計算する。単品商品については,”在庫”  テーブルの引当可能数には必要数を減算した値で、不足セット商品用引当済には  必要数を加算した値で更新する。 (5) トランザクションのISOLATIONレベルは,READ COMMITTEDとする。 検討す...

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

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf 問3 テーブルの設計及びSQLの設計に関する次の記述を読んで,設問1~3に答えよ。  設問3 〔注文トランザクションの設計〕について,(1),(2)に答えよ。  (2) (1)で起きるおそれがあるとしたデッドロックを防ぐためには,一つのトランザクションの中で”在庫”テーブルの行をどの列の順番で更新すればよいか。列名を答えよ。  案1の”商品”テーブルの構造を図2に、案2の”単品商品”テーブル及び”セット商品” テーブルの構造を図3に示す。  商品( 商品番号 ,商品名,商品説明,写真,販売単価,表示順,単品区分,     社内原価, 化粧箱番号 ,詰合せ日数) 図2 案1の ”商品”テーブルの構造  単品商品( 商品番号 ,商品名,商品説明,写真,販売単価,表示順,社内原価)  セット商品( 商品番号 ,商品名,商品説明,写真,販売単価,表示順,         化粧箱番号 ,詰合せ日数) 図3 案2の ”単品商品”テーブル及び”セット商品”テーブルの構造  Fさんは,関係”在庫”については,一つの”在庫”テーブルを設計した。”在庫”テーブルと, その他の主なテーブルの構造を,図4に示す。図4のテーブルは,全て案1,2に共通する。 また,主な列の意味を表1に示す。  セット商品構成( セット商品番号 , 単品商品番号 ,構成数)  在庫( 商品番号 ,引当可能数,不足セット商品数,不足セット商品用引当済数)  注文( 注文番号 ,注文日,お届け予定日,住所,顧客名,電話番号,支払情報)  注文明細( 注文番号 , 注文明細番号 , 商品番号 ,販売単価,注文数) 図4 両案に共通の主な テーブルの構造 注文の主キーである商品番号は、商品を示しており、その列には、表示順が存在する。 この順に全てのトランザクションがアクセスするなら、逆順にアクセスすることがなくなり、 デッドロックが発生しない。 ...