特定のタスクを完了するためにユーザーに支払う、設計中の Web サービスがあります。たとえば、ユーザーがリンクをクリックすると、たとえば $0.10 がアカウントに支払われます。ユーザーは、これらのタスクのいずれかを 1 日 20 回まで実行できます。ユーザーが資金の支払いを要求するには、アカウント残高が $5 である必要があります。
トランザクションとアカウントを追跡する最善の方法を決定しようとしています。私のデザインは現在次のようになっています。
Accounts
---------
| account_id | member_id | balance |
-------------------------------------
| 1 | 1 | 497.8500 | -- System Account
| 2 | 5 | 2.1500 |
Transactions
------------
| transaction_id | account_id | type_id | task_id | date | amount |
-------------------------------------------------------------------
| 1 | 1 | Debit | 1 | date | -1.10 |
| 2 | 2 | Credit | 1 | date | 1.10 |
| 3 | 1 | Debit | 1 | date | -1.05 |
| 4 | 2 | Credit | 1 | date | 1.05 |
この設計は、複式簿記の会計原則に基づいています。ここで私のジレンマは次のとおりです。技術的には、ユーザーが「支払い」を要求するまで、このお金は支払われません。「支払い」は、ユーザーがリクエストを送信し、リクエストが承認され、アカウントの残高からお金が差し引かれ、PayPal 経由で送金されることで構成されます。私の質問は、ユーザーがまだ支払いを要求していない場合、実際にシステムの残高から金額を差し引くのは良い考えですか? アカウントのお金は、サイトで追加の資金を調達するために使用できます。また、30 日間の非アクティブ後に期限切れになります。
私の考えは、トランザクションテーブルをそのままにして、次の構造を持つペイアウトと呼ばれる別のテーブルを設計することでした
Payouts
-------
| payout_id | account_id | date | amount |
------------------------------------------
| 1 | 2 | date | $2.00 |
しかし、支払いをトランザクション テーブルに反映するにはどうすればよいでしょうか。不完全なようです。
トランザクション テーブルからタスクを分離し、ユーザーが支払いを要求した場合にのみトランザクション レコードを入力する必要がありますか? そうすることで監査能力が失われるかどうかはわかりません。
誰か洞察力がありますか?