問題
問88 複数の利用者が同時にデータベースを利用する場合に、1人の利用者がデータ更新中に、同一のデータを別の利用者が参照しようとした。このとき、データの整合性を保障するためのデータベース管理システムでの制御として、適切なものはどれか。
ア 更新処理を中断して参照させる。
イ 更新中の最新のデータを参照させる。
ウ 更新中の利用者の処理が終了してから参照させる。
エ 更新を破棄して更新前のデータを参照させる。
解説と解答
一人の利用者がデータ更新中に、同一のデータを別の利用者が参照しようとした場合、適切な制御が行われていないと、「前の利用者の更新結果が反映されていない、古い不適切なデータを参照してしまう」というトラブルが発生します。特に、古いデータを参照した利用者が、そのデータを用いて処理した結果でデータを更新する場合、「前の利用者が行った更新結果が上書きされてしまい、更新内容が失われてしまう」というトラブルが発生し、データの整合性が損なわれてしまいます。例えば、次のような事例を考えてみましょう。なお、ここではデータxの初期値を200とします。
・利用者Aさんは、データxを参照し、データxに100を加算した結果をデータxに書き込む
・利用者Bさんは、データxを参照し、データxに50を加算した結果をデータxに書き込む
利用者Aさんがデータxを更新中に、利用者Bさんがデータxを参照し、利用者Aさんが加算結果の300(=200+100)でデータxを更新した後に、利用者Bさんが加算結果の250(=200+50)でデータxを更新したとします。本来であれば、データxの最終的な値は350(=200+100+50)になるはずなのですが、実際のデータxの値は250であり、利用者Aさんの更新結果が失われています。
このようなトラブルが発生するのを避け、データの整合性を保障するためには、データベース管理システム(DBMS:Database Management System)において、「更新中の利用者の処理が終了してから参照させる」ように制御する必要があります。前述の事例の場合には、利用者Aさんが加算した結果をデータxに書き込んでから、利用者Bさんがデータxを参照するように制御します。これにより、利用者Bさんがデータxを参照したとき、正しいデータxの値(=300)を取得でき、それに基づいた正しい加算結果の350(=300+50)でデータxを更新することができます。
なお、データベース管理システムにおいて、このように処理の流れを制御する機能のことを排他制御と言います
従って正解は、選択肢ウです。
アプリケーションデザイナー 代表取締役