データベーススペシャリスト午後I 事例記述平成31年 春期
午後I 問2
問2 データベースでのトリガの実装に関するデータベース設計・実装
テーマ:トリガの実装とトランザクション分離レベルおよびデッドロック対策
左右2分割表示:左側の問題文をスクロールしながら右側の設問に解答できます
長文事例本文
図表クリックで拡大問2 データベースでのトリガの実装に関する次の記述を読んで,設問1~3に答えよ。
オフィスじゅう器メーカの Y 社は,部品の入出庫,発注を行う在庫管理システムを構築している。
〔RDBMS の主な仕様〕
在庫管理システムに用いている RDBMS の主な仕様は,次のとおりである。
1. ISOLATION レベル
選択できるトランザクションの ISOLATION レベルとその排他制御の内容は,表 1 のとおりである。ただし,データ参照時に FOR UPDATE 句を指定すると,対象行に専有ロックを掛け,トランザクション終了時に解放する。
ロックは行単位で掛ける。共有ロックを掛けている間は,他のトランザクションからの対象行の参照は可能であり,更新は共有ロックの解放待ちとなる。専有ロックを掛けている間は,他のトランザクションからの対象行の参照,更新は専有ロックの解放待ちとなる。
表 1 トランザクションの ISOLATION レベルとその排他制御の内容
| ISOLATION レベル | 排他制御の内容 |
| :--- | :--- |
| READ COMMITTED | データ参照時に共有ロックを掛け,参照終了時に解放する。
データ更新時に専有ロックを掛け,トランザクション終了時に解放する。 | | REPEATABLE READ | データ参照時に共有ロックを掛け,トランザクション終了時に解放する。
データ更新時に専有ロックを掛け,トランザクション終了時に解放する。 | 索引を使わずに,表探索で全ての行に順次アクセスする場合,検索条件に合致するか否かにかかわらず全行をロック対象とする。索引探索の場合,索引から読み込んだ行だけをロック対象とする。 2. トリガ テーブルに対する変更操作(挿入・更新・削除)を契機に,あらかじめ定義した処理を実行する。 (1) 実行タイミング(テーブルに対する変更操作の前又は後。前者を BEFORE トリガ,後者を AFTER トリガという)を定義することができる。 (2) 列値による実行条件を定義することができる。 (3) トリガ内では,トリガを実行する契機となった変更操作を行う前と後の行を参照することができる。挿入では操作後の行の内容を,更新では操作前の行と操作後の行の内容を,削除では操作前の行の内容を参照することができる。参照するには,操作前と操作後の行に対する相関名をそれぞれ定義し,相関名で列名を修飾する。 (4) BEFORE トリガの処理開始から終了までの同一トランザクション内では,全てのテーブルに対して変更操作を行うことはできない。 (5) トリガ内で例外を発生させることによって,契機となった変更操作をエラーとして終了することができる。 〔在庫管理システムのテーブル〕 在庫管理システムの主なテーブルのテーブル構造は,図 1 のとおりである。索引は,主キーだけに定義している。
拡大
〔在庫管理業務の概要〕
(1) 組立工場では,複数の生産ラインが稼働し,それぞれ異なる製品を組み立てている。各製品の組立てに必要な部品は倉庫に保管し,必要に応じて生産ラインに出庫する。
(2) 部品は,部品番号で識別する。倉庫内に存在する在庫を,実在庫と呼ぶ。このうち,出庫対象となったものを,引当済在庫と呼ぶ。
(3) 部品の発注の方式は定量発注である。Y 社の定量発注では,部品ごとの実在庫数量から引当済数量を差し引いた値が,基準在庫数量を下回った都度,部品ごとに決められた部材メーカに対して,決められた数量(補充ロットサイズ)を発注する。
(4) 出庫要求では,倉庫に対して部品の出庫を要求する。“出庫要求”テーブル及び“出庫要求明細”テーブルに出庫要求の内容を登録し,“出庫要求”テーブルの処理状況に‘要求発生’を記録する。出庫要求番号は,出庫要求の発生順に一意な連番である。組立てに必要な複数の部品を一つの出庫要求とし,1 トランザクションで処理する。生産ラインごとに様々な組合せの部品を要求する。また,部品の要求は生産ラインでの組立ての状況に応じて任意の契機で発生する。
(5) 在庫引当では,出庫要求に応じて,“出庫要求明細”テーブルに指定した部品番号の部品について出庫要求数量の出庫が可能かどうか判定し,出庫可能であれば“在庫”テーブルの引当済数量を更新する。全ての部品の在庫引当が完了したら,“出庫要求”テーブルの処理状況を‘引当実施’に更新する。
在庫引当できない部品が存在した場合は,在庫引当を破棄して処理状況を‘引当失敗’に更新し,部品が入庫されるのを待って改めて出庫要求する。
(6) 出庫では,在庫引当が完了した部品を倉庫から搬出する。毎朝,“出庫要求”テーブルの処理状況が‘引当実施’のものを対象に実施する。それぞれの部品の出庫が完了したら,“在庫”テーブルの実在庫数量及び引当済数量を更新し,“出庫要求”テーブルの処理状況を‘出庫実施’に更新する。出庫は出庫要求単位に 1 トランザクションで処理し,全ての部品をまとめて出庫する。
(7) 発注では,“発注”テーブルの処理状況に‘要求発生’を記録し,“在庫”テーブルの発注済フラグをオンにする。
(8) 入庫では,部材メーカから納品される都度,“在庫”テーブルの実在庫数量を更新し,発注済フラグをオフにする。また,“発注”テーブルの処理状況を‘入庫実施’に更新する。納品された複数の部品をまとめて,1 トランザクションで処理する。
〔トリガでの在庫引当処理の設計〕
出庫要求に連動した在庫引当を実行させたいので,トリガを利用するように処理を見直すことにした。トリガでの在庫引当処理を図 2 に示す。
なお,引当失敗の場合は,出庫要求側でロールバックを行った後,“出庫要求”テーブルの処理状況を‘引当失敗’に更新する。
拡大
〔トリガでの定量発注の設計〕
在庫引当時の定量発注のために,発注の具体的な処理はストアドプロシージャで用意し,トリガから呼び出すことにした。ストアドプロシージャでは,“発注”テーブルと“在庫”テーブルに変更操作を行う。トリガを定義する SQL を図 3 に示す。さらに,図 3 の内容のレビューを行った。レビューでの指摘内容と対策を表 2 に示す。
拡大
拡大
データ更新時に専有ロックを掛け,トランザクション終了時に解放する。 | | REPEATABLE READ | データ参照時に共有ロックを掛け,トランザクション終了時に解放する。
データ更新時に専有ロックを掛け,トランザクション終了時に解放する。 | 索引を使わずに,表探索で全ての行に順次アクセスする場合,検索条件に合致するか否かにかかわらず全行をロック対象とする。索引探索の場合,索引から読み込んだ行だけをロック対象とする。 2. トリガ テーブルに対する変更操作(挿入・更新・削除)を契機に,あらかじめ定義した処理を実行する。 (1) 実行タイミング(テーブルに対する変更操作の前又は後。前者を BEFORE トリガ,後者を AFTER トリガという)を定義することができる。 (2) 列値による実行条件を定義することができる。 (3) トリガ内では,トリガを実行する契機となった変更操作を行う前と後の行を参照することができる。挿入では操作後の行の内容を,更新では操作前の行と操作後の行の内容を,削除では操作前の行の内容を参照することができる。参照するには,操作前と操作後の行に対する相関名をそれぞれ定義し,相関名で列名を修飾する。 (4) BEFORE トリガの処理開始から終了までの同一トランザクション内では,全てのテーブルに対して変更操作を行うことはできない。 (5) トリガ内で例外を発生させることによって,契機となった変更操作をエラーとして終了することができる。 〔在庫管理システムのテーブル〕 在庫管理システムの主なテーブルのテーブル構造は,図 1 のとおりである。索引は,主キーだけに定義している。
拡大図1 主なテーブルのテーブル構造
拡大図2 トリガでの在庫引当処理(未完成)
拡大図3 トリガを定義するSQL(未完成)
拡大表2 指摘内容と対策(未完成)
設問一覧 & 解答・演習
まずは解答を作成してみましょう。「解答例を見る」をクリックするとIPA公式解答例と採点基準が開きます。
設問1 (1)記号・選択式
〔トリガでの在庫引当処理の設計〕について,図2中の ア 〜 カ に入れる適切な字句を答えよ。
※直接入力してください
設問1 (2)(a)記述問題
制限字数:80 字以内
図2のトリガを実行するトランザクションの ISOLATION レベルについて,READ COMMITTED で,複数の出庫要求が同時に発生した場合,トリガに起因して引当済数量が不正になることがある。どのようにして問題が発生するか,80字以内で述べよ。
0 / 80 文字
設問1 (2)(b)記述問題
制限字数:20 字以内
図2のトリガを実行するトランザクションの ISOLATION レベルについて,READ COMMITTED で,(a)の問題を発生させないためには,BEFORE トリガで行を参照する際に,どのような対策を施す必要があるか,20字以内で述べよ。
0 / 20 文字
設問2 (1)記号・選択式
〔トリガでの定量発注の設計〕について,図3中の a 〜 d に入れる適切な字句を解答群の中から選び,記号で答えよ。
【空欄スロット選択】 割り当てる空欄を選んでから下の選択肢をクリック:
選択中の解答:未選択(上の選択肢ボタンをクリックしてください)
設問2 (2)記号・選択式
〔トリガでの定量発注の設計〕について,表2中の [ あ ] 〜 [ え ] に入れる適切な字句を答えよ。
※直接入力してください
設問3 (1)記号・選択式
出庫要求と入庫でデッドロックが発生することがある。対象のテーブル名を答えよ。
※直接入力してください
設問3 (2)記述問題
制限字数:50 字以内
(1)のデッドロックの回避策を二つ挙げ,それぞれ50字以内で具体的に述べよ。
0 / 50 文字
午後I長文記述の得点力を引き上げる定番対策書Amazon・楽天 公式提携
PR
IPA 厳選対策書徹底攻略 データベーススペシャリスト教科書 令和8年度株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス
DB徹底攻略株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス
徹底攻略 データベーススペシャリスト教科書 令和8年度
💡 推薦ポイント:午後I・午後IIの概念データモデル穴埋めや排他制御・性能設計の記述問題で確実に合格点を勝ち取る実践テクニックが満載です。
¥3,278(税込)
※本リンク先はプロモーション(アフィリエイト広告)が含まれています
【出題趣旨】IPA公式発表
【採点講評】IPA公式発表
本問に関連するデータベーススペシャリスト重要用語解説
本番形式・制限時間付きで演習する
平成31年 春期 午後I(3問中2問選択・90分)を実戦演習モードで通し解答し、総合採点を受けられます。