2017-06-26 10 views
0

整合性のある状態や「厳密な」アトミック性が必要ない場合、データベーストランザクションをいつ使用するのかを理解しています。'consistent state'/'atomicityが不要な場合のデータベーストランザクション

私は、他のどこかで追加を相殺するためにある列の縮小を必要とする銀行業務スタイルの要件はありません。

私は原子性のいくつかの形を持っていますが、「使いやすさ」のためだけであり、dbトランザクションを使用するのに十分かどうか疑問です。

具体的には、テーブルA、B、Cにエントリを作成する必要があります。テーブルCはBに依存し、BはAに依存します。ブラウザでは、実際にすべてのデータを1つのフォームに表示し、バックエンドに送られ、テーブルAのエントリが試行され、続いてB(参照IDがAから作成されたばかりのもの)、C(参照IDがBから作成されたもの)が続きます。

Aに障害が発生した場合はAが成功したが、Bが故障した場合、ユーザーは& Bが成功した場合C. B &を追加するページにリダイレクトされている場合は、ユーザーがA. に関するエラーメッセージを表示してフォームをreshownされますCが失敗すると、ユーザーはCを追加するページにリダイレクトされます。

これはかなりのエラー処理と「すべて成功」または「何か失敗しました。何も作成されていません。同じページにユーザーを置いたり、成功すればリダイレクトすることができるので、最も簡単になります。また、B &のCの失敗の可能性は、私がクライアント側で検証を行うので非常に低いことに留意してください。

私はトランザクションアプローチとエラー処理アプローチを使用する必要があります。それほど厳格ではありません。トランザクション・アプローチまたは一連のインサート・アプローチを選択する前に、私が必要とするいくつかの考慮点は何か。

答えて

0

"すべてかどうか"の場合はトランザクションを使用する必要があります。 IOW、BまたはCが失敗した場合は、Aへの保存(挿入または更新)をロールバックする必要があります。すべてが合格しなかった場合、何もしないで、データベースは試行前の状態のままです。つまり、一部の言語でトランザクションを行うことは難しいかもしれません。あなたの場合、私はストアドプロシージャを作成し、そのプロシージャにすべてのデータを渡すことをお勧めします。プロシージャ内では、トランザクション内でアクションをラップし、合格/不合格インジケータ、または作成されたテーブルAのレコードIDを返します。失敗した場合は-1を返します。

関連する問題