独立性のレベルを示す「隔離性水準」を理解する「データベーススペシャリスト試験」戦略的学習のススメ(24)(2/3 ページ)

» 2017年10月03日 05時00分 公開

午後試験演習

 これまで説明した午前試験対策用の知識は午後試験でも役に立ちます。以下の設問で午後試験の具体的な出題イメージを掴みましょう。

関係データベースのテーブルを更新するプログラムの設計に関する次の記述を読んで、設問1〜3に答えよ。

A社に勤務するB氏は、顧客からの商品の注文内容を入力すると在庫の引当てを行う受注入力処理の設計を指示された。そこでB氏は、次のような受注入力画面と受注入力処理のテーブル構造、埋込みSQLを使った受注入力処理プログラムを設計した。

〔受注入力システムの概要〕

1.受注入力画面と受注入力処理のテーブル構造

 受注入力画面を図1に、受注入力処理のテーブル構造を図2に示す。

図1 受注入力画面 図1 受注入力画面
図2 受注入力処理のテーブル構造 図2 受注入力処理のテーブル構造

2.受注入力処理の内容

(1)受注入力担当者は、受注入力画面に顧客番号及び1回当たり6個までの商品番号と受注数を入力する。受注入力画面の入力確定ボタンを押すと、受注入力処理プログラムが起動する。

(2)受注入力処理プログラムでは、次のような処理を行う。受注入力処理プログラムの処理の流れとSQL文を図3に示す。

  • 1回の受注入力に対して一意な受注番号を付与(以下、採番という)し、“受注”テーブルに1行を挿入する(図3の(2)(4)参照)。
  • 受注した商品ごとに“在庫”テーブルに対して在庫引当てを行い、“受注明細”テーブルに1行を挿入する(図3の(5)〜(8)参照)。
  • すべての受注商品について在庫引当てを行った後、受注番号、受注年月日及び商品番号ごとの出荷予定数を受注入力画面に表示して、処理を完了する(図3の(9)参照)。

(3)受注入力担当者は、画面に表示された受注番号と出荷予定数を確認する。

photo 図3 受注入力処理プログラムの処理の流れとSQL文

 尚、受注入力処理プログラムに与えられた顧客番号は正しく、すべての商品番号は、“在庫”テーブルに存在するものとする。また、“受注”テーブルの主キーである受注番号に重複キー違反が発生した場合、及びSQL文の処理中にデッドロックが発生した場合は、トランザクションをロールバックする(図3の(10)参照)。

〔発生した問題点〕

図3の受注入力処理プログラムを作成して、このプログラムを実行するトランザクションを並行して実行したとき、次のような問題点A〜Cが発生した。

1.問題点A

 図3の(4)の処理を行うとき、主キーである受注番号に重複キー違反が発生し、“受注”テーブルに行を挿入できなかった。そこで、この問題への対応策として、一意な採番を行うために、図4に示した“採番”テーブルを追加し、その主キーは、出荷指図などほかの処理の採番にも利用できるように、伝票種別とした。そして、図3の(3)の処理を、図5のように変更した。その結果、受注番号に重複キー違反は発生しなくなったが、トランザクションのスループットが著しく低下するという問題が発生した。

photo 図4 “採番”テーブルの構造
photo 図5 変更後の受注入力処理プログラムの処理の流れとSQL文(一部)

2.問題点B

 図3の(7)に示した“在庫”テーブルへの更新で、デッドロックが発生することがあった。特に、複数の売れ筋商品を受注入力するトランザクションの間で、デッドロックの発生頻度が高いという傾向が見られた。(筆者注:以下略)


設問1

受注番号の採番に関して発生した問題点Aにおける対応策について、次の問いに答えよ。

(1)スループットが低下した理由を、トランザクションの排他制御の観点から100字以内で述べよ

(2)スループットが低下した問題への対応策として、図3の受注入力処理プログラム中にSQL文を1つ追加することにした。図3のプログラム中のどの処理番号の前に追加すべきか。その処理番号と、追加すべきSQL文を答えよ

(H17春DB午後I問4設問1)


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。