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

平成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個を注文する。

TR1TR2TR3TR4
TR1 ウ   エ  ×
TR2×××
TR3
 オ   カ 
TR4
×


問題の対象となっているのは、以下の内容である。

〔注文トランザクションの設計〕

 Fさんは,注文トランザクションについて,次のように設計した。

(1) 注文単位を一つのトランザクションで処理し,最後にCOMMIT文を発行する。

(2) 注文に基づいて,”注文”テーブル及び”注文明細”テーブルに行を挿入する。

(3) 商品については,商品一覧画面に表示された順番に”在庫”テーブルの
 引当可能数を調べ,引当可能ならば注文数を減算した値で引当可能数を更新する。

(4) セット商品が在庫不足のとき,”在庫”テーブルの不足セット商品数に不足数を
 加算する。”セット商品構成”テーブルから,主キー順に当該セット商品を構成する
 単品商品の構成数を調べ,必要数を計算する。単品商品については,”在庫”
 テーブルの引当可能数には必要数を減算した値で、不足セット商品用引当済には
 必要数を加算した値で更新する。

(5) トランザクションのISOLATIONレベルは,READ COMMITTEDとする。


検討するポイントは、2つのトランザクションがお互いに相手のトランザクションの
更新テーブルのロック解除待ちとなってしまうことがあるかないか。

ISORATIONのREAD COMMITTEDは、「コミットされた行だけを読める」ということ。
つまり別トランザクション更新中の行は読取時に、ロックがかかり、そちらが
コミットしてロック解除されるまで、ロック解除待ちになってしまうということである。

(4)の説明が長すぎて、正しい理解が困難である。
決定表で、どんな状態の場合、なにが行われるのかを整理してみる。


注文による在庫更新の決定表

在庫.引当可能数 >= 注文明細.注文数YYNN
在庫.引当可能数 < 注文明細.注文数NNYY
商品は単品商品である。YNYN
商品はセット商品である。NYNY
━━━━━━━━━━━━━━━━━━━━━━
在庫.引当可能数から注文明細.注文数を減じるXX

在庫.不足セット商品数に不足数を加算する


X
セット商品構成を使ってセット商品に必要な
単品商品のそれぞれの必要数を求める




X
求めた単品商品の在庫.引当可能数から
セット商品に必要な数を減じる




X
求めた単品商品の在庫.不足セット商品用引当済へ
セット商品に必要な数を加算する




X

セット商品の在庫が不足した場合、そのセットを構成する単品商品の在庫情報の
更新が発生する。
つまり、セット商品1個の注文は、単品N個の注文と同等の扱いを考慮しなくては
ならない。

仮に商品番号の表示順は、単品商品は、TS01、TS02、TS03という順
セット商品は、SS01、SS02、SS03という順序となっているとしても、単品商品と
セット商品の優先順位や、セット商品構成の主キー順との関係は未定義である。

TR1 と TR2の場合
例: TR1 商品 TS01 → TS02
   TR2 商品 SS01(TS02) → TS01
 デッドロックがありうる。

TR1とTR3の場合
例: TR1 商品 TS01 → TS02
   TR3 商品 SS01(TS02、TS01、…)
 デッドロックがありうる。

TR3 と TR3の場合
例: TR3 商品 SS01(TS02、TS01、…)
   TR3 商品 SS02(TS02、TS01、…)
 デッドロックなし。セット商品が異なって、構成する単品商品がいくつも重なって
いたとしても、それはセット商品構成の主キー順にアクセスしているので、
デッドロックにならない。

TR3 と TR4の場合
例: TR3 商品 SS01(TS01、TS02、…)
   TR4 商品1 SS02(TS02、…)、商品3 SS02(TS01、…)
 デッドロックがありうる。


【回答】

ウ : ×

エ : ×

オ : ○

カ : ×


コメント

このブログの人気の投稿

平成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 設問2 (2)

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf 問3 テーブルの設計及びSQLの設計に関する次の記述を読んで,設問1~3に答えよ。  設問2 〔SQL分の設計〕について,(1)~(3)に答えよ。  (2) SQL4及びSQL5,指定した注文について,注文されたセット商品を構成する単品商品の合計数を求めるSQL文です。SQL4及びSQL5の実行結果が同じにように,  h   に入れる適切な字句を答えよ。 問題の対象となっているのは、以下の内容である。 〔SQL文の設計〕  Fさんが,案1と案2のそれぞれについて設計した主なSQL文を表4に示す。 表4 案1と案2について設計した主なSQL文(未完成) 案 SQL SQL文 案1 SQL1 SELECT M.商品番号,P.社内原価,P.化粧箱番号 FROM 注文明細 M,商品 P WHERE M.商品番号 = P.商品番号 AND M.注文番号 = :hv 案2 SQL2 SELECT M.商品番号,T.社内原価,S.化粧箱番号 FROM 注文明細 M  f   JOIN 単品商品 T ON M.商品番号 = T.商品番号  f   JOIN セット商品 S ON M.商品番号 = S.商品番号 WHERE M.注文番号 = :hv 案2 SQL3 SELECT M.商品番号,T.社内原価,CAST(NULL AS INT) 化粧箱番号 FROM 注文明細 M   g   JOIN 単品商品 T   ON M.商品番号 = T.商品番号 WHERE M.注文番号 = :hv UNION ALL SELECT M.商品番号,CAST(NULL AS INT) 社内原価,S.化粧箱番号 FROM 注文明細 M   g   JOIN セット商品 S   ON M.商品番号 = S.商品番号 WHERE M.注文番号 = :hv 案1 SQL4 SELECT K.単品.商品番号,SUM(  h   ...