0

我有一个复杂的网站,用真钱处理在线游戏。我为我的交易使用了复式数据库设计,一个简单的例子如下:

John 存入 5 美元 John 收到 5000 个积分 John 使用这 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 帐户的借记以及对我们系统帐户的贷记。

我的问题是,我是否还应该包括约翰从我们的 SystemGame 账户转移资金到他的游戏账户的其他交易?或者我应该为每组事务都有一个存储过程?所有 4 笔交易同时发生,John 在存入 5 美元后立即记入贷方。

另外,我应该将游戏积分的交易表与真实货币交易表分开吗?

4

2 回答 2

0

我想这就是你想要的。但我建议您进行 2 次不同的交易来区分游戏内货币和真实货币。

唯一的原因是,如果将来您需要更改游戏内资金管理或真实资金管理,您可以单独进行。

于 2012-08-08T14:50:16.057 回答
0

事务必须是原子的:必须完成所有步骤。如果一个失败,一切都会回滚。

如果您提到的这 4 个步骤必须一次全部完成,则它们必须在一个事务中。

所以,对我来说,你目前的方法是可以的。

但是,如果您想将事物拆分为 2 个存储过程,您可以使用您使用的语言(PHP、C#)管理事务。

检查这个:MySQL 中的事务 - 无法回滚,这个:PHP + MySQL 事务示例

于 2012-08-08T15:14:53.427 回答