2012-08-08 34 views
0

我有一個複雜的網站,用真錢處理在線遊戲。我爲我的交易使用了一個複式數據庫設計,一個簡單的例子如下:在一個存儲過程中分組事務,或分爲兩個存儲過程?

約翰存款$ 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,從約翰的PayPal賬戶的借記卡和信用卡給我們的系統帳戶。

我的問題是,我是否也應該包括約翰從我們的SystemGame賬戶轉賬到他的遊戲賬戶的其他交易?還是應該爲每組事務存儲一個存儲過程?所有4筆交易同時發生,John在存入$ 5後立即記入貸方。

此外,我應該從真實貨幣交易表中分離遊戲信用的交易表嗎?

回答

0

我認爲這是你想要的。但我建議你在2個不同的交易中分開遊戲幣和真錢。

唯一的原因是,如果將來您需要更改遊戲幣管理或實際資金管理,您可以單獨執行。

0

交易必須是原子的:所有步驟必須完成。如果一個失敗了,一切都會回滾。

如果您提及的4個步驟必須全部完成,那麼它們必須處於單個事務中。

所以,對我而言,你目前的做法是OK的。

但是,如果您想將事物分成2個存儲過程,則可以使用您使用的語言(PHP,C#)管理事務。

選中此項:Transactions in MySQL - Unable to Roll Back和這個:PHP + MySQL transactions examples