平成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個を注文する。
問題の対象となっているのは、以下の内容である。
〔注文トランザクションの設計〕
Fさんは,注文トランザクションについて,次のように設計した。
(1) 注文単位を一つのトランザクションで処理し,最後にCOMMIT文を発行する。
(2) 注文に基づいて,”注文”テーブル及び”注文明細”テーブルに行を挿入する。
(3) 商品については,商品一覧画面に表示された順番に”在庫”テーブルの
引当可能数を調べ,引当可能ならば注文数を減算した値で引当可能数を更新する。
(4) セット商品が在庫不足のとき,”在庫”テーブルの不足セット商品数に不足数を
加算する。”セット商品構成”テーブルから,主キー順に当該セット商品を構成する
単品商品の構成数を調べ,必要数を計算する。単品商品については,”在庫”
テーブルの引当可能数には必要数を減算した値で、不足セット商品用引当済には
必要数を加算した値で更新する。
(5) トランザクションのISOLATIONレベルは,READ COMMITTEDとする。
検討するポイントは、2つのトランザクションがお互いに相手のトランザクションの
更新テーブルのロック解除待ちとなってしまうことがあるかないか。
ISORATIONのREAD COMMITTEDは、「コミットされた行だけを読める」ということ。
つまり別トランザクション更新中の行は読取時に、ロックがかかり、そちらが
コミットしてロック解除されるまで、ロック解除待ちになってしまうということである。
(4)の説明が長すぎて、正しい理解が困難である。
決定表で、どんな状態の場合、なにが行われるのかを整理してみる。
注文による在庫更新の決定表
セット商品の在庫が不足した場合、そのセットを構成する単品商品の在庫情報の
更新が発生する。
つまり、セット商品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、…)
【回答】
ウ : ×
エ : ×
オ : ○
カ : ×
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とする。
検討するポイントは、2つのトランザクションがお互いに相手のトランザクションの
更新テーブルのロック解除待ちとなってしまうことがあるかないか。
ISORATIONのREAD COMMITTEDは、「コミットされた行だけを読める」ということ。
つまり別トランザクション更新中の行は読取時に、ロックがかかり、そちらが
コミットしてロック解除されるまで、ロック解除待ちになってしまうということである。
(4)の説明が長すぎて、正しい理解が困難である。
決定表で、どんな状態の場合、なにが行われるのかを整理してみる。
注文による在庫更新の決定表
在庫.引当可能数 >= 注文明細.注文数 | ┃ | Y | Y | N | N |
在庫.引当可能数 < 注文明細.注文数 | ┃ | N | N | Y | Y |
商品は単品商品である。 | ┃ | Y | N | Y | N |
商品はセット商品である。 | ┃ | N | Y | N | Y |
━━━━━━━━━━━━━━━━━━━━━━ | ╋ | ━ | ━ | ━ | ━ |
在庫.引当可能数から注文明細.注文数を減じる | ┃ | X | X | ||
在庫.不足セット商品数に不足数を加算する | ┃ | 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 商品 SS01(TS02、TS01、…)
TR3 商品 SS02(TS02、TS01、…)
デッドロックなし。セット商品が異なって、構成する単品商品がいくつも重なって
いたとしても、それはセット商品構成の主キー順にアクセスしているので、
デッドロックにならない。
TR3 と TR4の場合
例: TR3 商品 SS01(TS01、TS02、…)
TR4 商品1 SS02(TS02、…)、商品3 SS02(TS01、…)
デッドロックがありうる。
【回答】
ウ : ×
エ : ×
オ : ○
カ : ×
コメント
コメントを投稿