0

私はリアルマネーでオンライン ゲームを扱う複雑な Web サイトを持っています。私はトランザクションに複式エントリのデータベース設計を使用しています。簡単な例は次のとおりです。

ジョンが $5 を入金 ジョンが 5000 クレジットを受け取る ジョンはその 5000 クレジットを使ってゲームをプレイします。

データベース内のトランザクションは次のようになります。

trans_id | account_id  | trans_type | date | amount |
-----------------------------------------------------
1        | John(PayPal)| Debit      | date | -5.00  |
2        | System      | Credit     | date |  5.00  |
3        | SystemGame  | Debit      | date | -5000  |
4        | JohnGame    | Credit     | date |  5000  |

トランザクション 1 と 2、John の PayPal アカウントからの借方、およびシステム アカウントへの貸方を挿入するトランザクションを含むストアド プロシージャを作成しました。

私の質問は、John が SystemGame アカウントから彼の Game アカウントに送金した他のトランザクションも含めるべきですか? または、トランザクションのグループごとにストアド プロシージャを用意する必要がありますか? 4 つの取引はすべて同時に行われ、John は $5 を入金した直後に入金されます。

また、ゲーム クレジットのトランザクション テーブルをリアルマネーのトランザクション テーブルから分離する必要がありますか?

4

2 に答える 2

0

トランザクションはアトミックでなければなりません: すべてのステップを完了する必要があります。1 つでも失敗すると、すべてがロールバックされます。

あなたが言及したこれらの 4 つのステップをすべて一度に完了する必要がある場合は、それらを 1 つのトランザクションで行う必要があります。

だから、私にとっては、あなたの現在のアプローチは問題ありません。

ただし、2 つのストアド プロシージャに分割する場合は、使用する言語 (PHP、C#) からトランザクションを管理できます。

これを確認してください: MySQL のトランザクション - ロールバックできません、およびこれ: PHP + MySQL トランザクションの例

于 2012-08-08T15:14:53.427 に答える
0

これがあなたの望むものだと思います。ただし、ゲーム内マネーとリアルマネーを分けるために、2 つの異なる取引を行うことをお勧めします。

唯一の理由は、将来、ゲーム内マネー管理またはリアルマネー管理を変更する必要がある場合は、個別に行うことができるからです。

于 2012-08-08T14:50:16.057 に答える