我有一个我正在设计的网络服务,它向用户支付完成某些任务的费用。例如,如果用户点击一个链接,他们将获得 0.10 美元到他们的帐户。用户每天最多可以执行 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 的表,其结构如下
Payouts
-------
| payout_id | account_id | date | amount |
------------------------------------------
| 1 | 2 | date | $2.00 |
但是,我如何在交易表中反映支出?似乎不完整。
我是否应该将任务与交易表分开并仅在用户请求付款时才输入交易记录?我不确定这样做是否会失去审计能力。
有没有人有一些见识?