2024年 秋期 データベーススペシャリスト試験 問2
総合商社の労務管理システムのデータベース実装に関する問題
総合商社のY社は、労務管理にRDBMSを用いている。既存の勤怠管理機能に、新たに所在情報管理機能と監査機能を追加することになった。
[RDBMSの排他制御]
-
ロックは行単位で掛ける。共有ロックを掛けている間、他のトランザクションから対象行への共有ロックは可能であり、専有ロックは共有ロックの解放待ちとなる。専有ロックを掛けている間、他のトランザクションから対象行への共有ロック及び専有ロックは、専有ロックの解放待ちとなる。
-
索引を使わずに表探索で全ての行に順次アクセスする場合、検索条件に合致するか否かにかかわらず全行をロックの対象とする。索引探索の場合、索引から読み込んだ行だけをロックの対象とする。
[所在情報管理機能の追加]
1. 機能の概要
オフィス内のフリーアドレス化を推進するため、従業員の就業エリア(以下、エリアという)への入退室のログを記録し、従業員の所在情報をエリア情報表示端末で社内に公開する。エリア情報表示端末では、エリアの混雑状況なども表示する。
エリアには、建屋、フロア、執務室があり、従業員は各エリアへの入退室時にICカード社員証で認証を行う。従業員は入退室時に必ず認証を行うように定められており、他の従業員に続いて認証せずに入退室することは禁止されている。従業員は、建屋内にいる限りいずれかのエリアに所在しており、建屋から出ることで退出として扱われる。
所在情報管理機能では、認証時に入退室ログを記録する。また、記録した入退室ログを基に、従業員の現在位置を示す所在情報及びエリアの混雑状況を定期的に更新する。
2. テーブル構造
主なテーブルのテーブル構造は、図1のとおりである。主キーには主索引が定義されている。

3. 入退室ログ登録処理
従業員が入退室で認証する都度、"入退室ログ"テーブルに行を追加する。ログIDは時系列に昇順で採番し、入退室区分には入室('I')又は退室('O')を設定する。必要に応じて、連携する勤怠管理機能及びエリア情報表示端末に情報を送信する。
処理の概要を図2に示す。トランザクションのISOLATIONレベルはREPEATABLE READとする。
① 入退室ログを挿入する。
② 入退室区分が入室の場合、当該従業員の所在情報を参照し、最終入室エリアコードが退出の状態であれば、勤怠管理機能に入室情報を送信する。入退室区分が退室の場合、何もしない。
③ 当該エリアの在席者数を部横判定値取得を参照し、今回の入退室によって座席制御闘値を越岡又は下回ることになるかを確認し、印刷又は下回る場合はエリア情報表示端末に座席情報を送信する。
④ コミットする。
4. 所在情報更新処理
5分ごとに実行するバッチ処理で、定期的にエリア状況及び所在情報を更新する。
"入退室ログ"テーブルに登録されている入退室ログを読み込み、"エリア状況"テーブルのエリアごとの在席者数を更新、"所在情報"テーブルの従業員ごとの最終入室エリアコードを更新する(退出している場合は、最終入室エリアコードには'9999'を設定する)。全ての更新が終わったら、読み込み終わった入退室ログの位置を記録しておき、次回実行時はその続きから読み込む。
所在情報更新処理の概要を図3、所在情報更新処理に用いるSQL文を表1に示す。トランザクションのISOLATIONレベルはREPEATABLE READとする。
① SQL文を実行して最新のメインログテーブルを取得し、次入場者数INFO日時を設定する。
② なお、次入場者数LAMTについて、前回関数内での次入場者数INFO日時の値が設定されている場合、そのメインログテーブルの初期化の設定値として利用し、入場者数予約システムの整理を行う。
③ SQL文を実行して最新のメインログテーブルを更新する。フィルタの設定を確認しメインログテーブルのデータを更新し、フィルタに合致しないエラーデータの存在が確認された場合、エラーログに記録し、処理を継続して実行する。
④ SQL文を実行してコミットの設定を変更する。フィルタの処理が正常に終了した場合、各種設定を適用し、再構築作業時に復旧作業を実行する。なお、そのときメインログテーブルのエリアスティックを統計し、総合管理INFO日時に記録し、SQL文を実行してコミット処理を実行する。
⑤ 次入場者数LAMTについて、次入場者数INFO日時の値を設定する。

[監査機能の追加]
従業員の残業時間、休暇、エリアを、入退室ログと突き合わせてチェックする監査機能を、要件に基づいて設計した。
1. 監査機能の要件
(1) 監査対象月の1日から月末日までの勤怠をチェックする。監査対象月の月末の営業日から翌月の5営業日までの間、毎日実行する。
(2) 上長承認済み、かつ、監査未チェックの勤怠を対象にチェックする。なお、一度監査が終了した行でも、勤怠情報を従業員が更新した場合は、上長承認と監査結果をリセットして、再度、上長承認及び監査を行う。
(3) 監査機能のジョブは多重実行する。全てのジョブに一意なジョブIDを割り当て、それぞれのジョブに重複していない従業員番号の範囲を指定して実行する。また、処理の途中で失敗した場合、その原因を取り除いて、同じジョブIDで再実行することで、処理を再開する。なお、ジョブIDは再利用する。
2. 監査機能のテーブル設計
主なテーブルのテーブル構造は図4のとおりである。主キーには主索引が定義されている。
注記 エリアコードには、就業した建屋のエリアコードが設定される。自社建屋に立ち寄らない直行直帰の出張をした場合は、NULLが設定される。

"勤怠"テーブルには、従業員ごと年月日ごとの勤怠情報を記録する。上長承認には、承認済み('Y')又は未承認('N')を設定する。監査結果には、監査未チェックの行はNULLを設定し、チェックしたら適正('Y')又は不適正('N')を設定する。
監査機能のジョブが途中で失敗した場合に、ジョブを再実行するために"再開位置"テーブルを使用する。再開従業員番号には処理中の従業員番号を記録し、再実行時には記録していた従業員番号から処理を再開する。
3. 監査機能の処理設計
処理の流れとSQL文を図5に示す。トランザクションのISOLATIONレベルはREAD COMMITTEDとする。
郵便(定義域未登録、年月日、年体フラグ、出動時刻、道動時刻、残業時間、上長承認、監査結果
首都位置(ジョブID、再担定委員番号)
監査機能の実行時には他のトランザクションも実行されており、排他ロック解放待ちタイムアウトの考慮も必要である。排他ロック解放待ちタイムアウト時間をT秒とすると、他のトランザクションで排他ロック解放待ちタイムアウトさせないための図5中のN行を見積もる計算式は、次のようになる。
N < (T - Aに必要な時間) ÷ Bに必要な時間