SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

 そこで、データの整合性を保つために重要なのが、次の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つのデータだけ更新するような場合があります。

次のページ
ASP.NETでのトランザクション制御

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6702 2012/08/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング