取引の典型的な例は、普通預金口座からお金を引き出し、同じ銀行の当座預金口座に預金することです。
それでも、DBトランザクションは実際にはそのような例では使用されていないのではないかと疑っていますが、結局のところ、最終的には矛盾を調整するジャーナリングシステムによって結果の一貫性が実現されます。トランザクションが単一の更新(引き出し/預金)に使用されることを想像します。
ベストプラクティスは何ですか?ここでは単一の答えではないことを理解していますが、通常は何が行われているのでしょうか。
( これ は同じ質問をしますが、分散システムについてです。私は単一の銀行内で何が行われるかを尋ねています。)
銀行取引は 複式簿記 に基づいています。
つまり、口座残高は派生であり、直接保存または操作されません。
基本的に、everyトランザクションは、「XドルがアカウントAからアカウントBに移動された」というレコードといくつかの追加フィールドとして保存されます。アカウントの残高は、そのすべての流出と流入を合計することによって計算されます。
したがって、トランザクションはこのレベルでは実際には必要ありません。少なくとも原子性(トランザクションの最も一般的に説明されている機能)には必要ありません。耐久性を確保し、重複を防ぐためのメカニズムが必要です。
このシステムの利点は、お金が「失われる」などの不整合を防止するだけでなく、特定のアカウントのすべてのお金がどこから来たのかを常に確認できることです。それは横領と詐欺を隠すことをはるかに難しくします。
「マルチビジネスの金融取引処理の実世界」では、完全に切り離されたシステムが数多く存在します。したがって、「SQLトランザクション」ではこれをカバーできません。