Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

データの整合性を確保するためのトランザクション制御

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/08/07 14:00

 本連載ではツールやフレームワークの機能を最大限利用しつつ、保守、開発効率を意識したWebフォームアプリケーションを開発する方法を学んでいきます。今回から2回に渡って、データの整合性をどのように確保していくかということを学んでいきましょう。

目次

データの整合性を保つために必要な要素

 業務アプリケーションでは一般的に、多くの種類のデータを複数のユーザーが同時に扱います。そのため、何も策を講じないと簡単にお互いのデータ編集処理がぶつかり、データの整合性が崩れてしまいます。

 そこで、データの整合性を保つために重要なのが、次の2つです。

  • トランザクション制御
  • 排他制御

 今回、次回と2回にわたってそれぞれ1つずつ取り上げていきます。今回はトランザクション制御について学んでいきましょう。

トランザクション制御とは

 アプリケーションの動作のうち、「ある意味を持った一連の処理の塊」のことをトランザクションといいます。これまでの連載で作成してきたアプリケーションで言えば、場所、会議室の追加処理、更新処理、削除処理の塊が、それぞれ1つのトランザクションに該当します。

 そして、トランザクション制御とはこの一つのトランザクション内でデータの整合性が保たれるようにすることです。

トランザクション制御の有無による動作の違い

 トランザクション制御の有無でどのように動作が変わるのか、実際に例を挙げてみてみましょう。

 まず、サンプルアプリケーションの会議室予約システムでは、次にように予約情報の登録について履歴を残すとしましょう。

図1 予約、予約履歴テーブルイメージ
図1 予約、予約履歴テーブルイメージ

 このときは更新処理として予約IDが1のデータの予約終了日時を6/1 12:00に変更するとします。その際、何らかのエラーにより予約履歴の更新時にエラーが発生した場合を考えてみます。

1. トランザクション制御なし

 トランザクション制御を行わない場合、予約、予約履歴テーブルの更新はそれぞれ独立して行われます。従って、上記のケースでは予約テーブルは更新されますが、予約の変更に対応した予約履歴の登録が行われません。結果として、データの整合性が取れなくなってしまいます。

図2 トランザクション制御なしの動作
図2 トランザクション制御なしの動作
図3 トランザクション制御なしの場合の処理後データ
図3 トランザクション制御なしの場合の処理後データ

2. トランザクション制御有り

 トランザクション制御する場合、予約、予約履歴テーブルの更新を1つの塊として処理します。そのためには、更新処理を始める前に明示的にトランザクションの開始、更新処理終了後にトランザクションの処理の確定(これをコミットと呼びます)を行う必要があります。

 また、トランザクション処理中にエラーが発生した場合、トランザクションの処理の取消(これをロールバックと呼びます)を行うこともできます。

 従って、トランザクション制御なしの時とは違い、予約履歴テーブル更新時にエラーが発生した場合、ロールバックを行うことで予約、予約履歴とも更新処理開始前の状態に戻すことができます。

図4 トランザクション制御有りの動作
図4 トランザクション制御有りの動作
図5 トランザクション制御有りの場合の処理後データ
図5 トランザクション制御有りの場合の処理後データ

トランザクション制御の必要性

 本連載のサンプルがそうであるように、実際の業務アプリケーションでは、前述のようなヘッダー、明細型データや、バッチ処理で複数のデータを一度に更新するといったことは非常によくあることです。従って、トランザクション制御も原則として行わなければならないものだと思ってよいでしょう。

 例外的にトランザクション制御を行わなくてもよい例としては、単純なマスターメンテナンスなど、1つのトランザクションで1つのデータだけ更新するような場合があります。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高野 将(タカノ ショウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5