2010-11-02 85 views
7

你讓一個遊戲網站,用戶可以在購買遊戲積分和資金存入/貸記到用戶的虛擬賬戶玩一些遊戲等等等等。計費數據庫 - 存儲交易

如果你有一個會計記錄交易,它會被記錄是這樣的(也許有點複雜一些,但你明白了吧)

TRANSACTION 
PK_ID1 Cash  - $10 (System) 
PK_ID2 Deposit  $10 (System) 

TRANSACTION 
PK_ID3 Bank Account  - $10 (John) 
PK_ID4 Deposit  $10 (John) 

作爲開發人員,你真的需要浪費2個額外的記錄嗎?爲什麼不只是記錄它像這樣......(那麼你可以存儲相同的存款記錄下其他列,其中資金是從哪裏來的信息,狀態)

TRANSACTION 
PK_ID1 Cash  - $10 (system) 
PK_ID2 Deposit  $10 (John) 

有沒有的選項#1任何真正的優勢在選項#2和副簽證?

編輯:改性問題,除去CR,DR,並用符號代替。

+0

可能重複的[會計數據庫 - 存儲信用卡和借記卡?](http://stackoverflow.com/questions/4074425/accounting-database-storing-credit-and-debit) - 必須是會計星期SO: - ) – paxdiablo 2010-11-02 03:43:12

+1

@paxdiablo:重複的問題,是的。同一用戶?是的。 90分鐘後問了這個問題。 – NotMe 2010-12-21 19:39:03

回答

11

(回答你的問題,但也應對在paxdiablo的回答提出的一些要點。)

這是無關的會計師找你的數據庫中。使用雙輸入,錯誤很容易追蹤;這是一個會計國稅局的要求,所以真的,你沒有選擇,你需要任何系統處理公共資金的雙重入場。

  • (請不要試圖告訴我什麼是「雙項」是,我已經寫了雙輸入系統爲銀行,審計要求)複式是一種覈算方法的基礎上,一組帳戶。每筆金融交易都是日記賬分錄;如果所有交易從一開始就被重新應用,所有賬戶的餘額將與現在的餘額完全相同。

  • 雙項意味着每筆交易都有一個「要」和「從」賬戶;金錢永遠不會離開系統或進入系統。每個信用都附有一個借記卡。(1)不是(2)的「複式」版本,它們不易被比較。約翰的交易的雙項版本(一個金融交易),在邏輯會計術語:

    • 來源:JohnAccount爲:SystemAccount金額:10.00(美元)

    • 這很可能是兩行一個表,一個貸方,另一個借方,這兩個插入包裝在一個SQL Transaction中。

  • 這就是會計系統,這是內部的,並處理金錢。我們完了。

  • 但您還將會計系統與購買/銷售系統結合在一起(未明確聲明)。當然,對於你從約翰那裏拿下的十塊錢,你需要給他買任何他買來的東西,並記錄下來。約翰買了十塊錢值得遊戲學分,如果你追蹤,那麼,您還需要:

    • 來源:SystemGamingAccount爲:JohnGamingAccount金額:100(學分)
      或以美元表示:
    • 來源:SystemGamingAccount爲:JohnGamingAccount金額:10.00(美元)

    • 那個,也可能是在一個表中的兩行,一個是信貸和其他借記,四個插入包裹在一個SQL事務。

  • 需要明確的是,如果你是賣小部件,而不是遊戲積分,第二(小窗口跟蹤)交易將是:

    • 來源:Warehouse要:PublicSale金額:1(小部件)

    • 由於您正在倉庫中跟蹤單位,但沒有John Q Public在他的口袋裏有多少小工具,這是兩個插入加上一個更新(UPDATE Part SET QtInStock = QtyInStock - 1 WHERE PartCode = "Widget"),所有包裝在一個SQL事務中。

並沒有爲每個用戶帳戶,對吧。虛擬的,深奧的或實體的,它是一個法律實體,進行交易。所以我們不要假裝它不存在,因爲它是虛擬的。對於遊戲,一美元賬戶加一個遊戲(信用)賬戶。

信用卡/借記

我會把CR/DB回來;不是CHAR(2),而是布爾值。它會幫助你後,當表很大,

WHERE IsCredit = 1 

速度遠高於

WHERE Amount >= 0. 

注意,與「> =」你必須確保每個代碼段進行編碼以同樣的方式,有時不是「>」。布爾或char沒有這個問題。

+1

@LittleTreeX littlegreen?你對這個問題感到困惑嗎?或許可以問一個問題,清除你的困惑,而不是要求別人提出意見。 – PerformanceDBA 2010-12-21 18:49:26

+0

記住SO不是論壇,這個問題不是一個線程。當我讀到你的答案時,它非常假設我已經閱讀@ paxdiablo的答案,如果/當你的答案是upvoted時,情況就不會如此,所以它被列在最上面。你應該嘗試編輯你的答案,以便更好地獨立(或者明確地說,這部分是對@ paxdiablo答案的迴應,否則它最終會讓讀者感到困惑。) – jalf 2010-12-21 19:46:37

+0

@jalf。謝謝。編輯我的答案。 – PerformanceDBA 2010-12-21 20:01:52

2

就數據而言(這就是你要問的),沒有。您應該將其存儲爲有符號值。複式記賬法是不是暴民這樣做,它可以隱藏國稅局真正的利潤:-)

這意味着交易已經得到平衡(值永遠不會創建或銷燬,只是轉化)。如果您只將它們存儲在一個帶有符號的列中,那麼平衡交易(和賬簿)會容易得多。

在視覺呈現方面,一些會計師可能喜歡他們在單獨的列,但絕大多數會產生與「陰性」只是表示不同的報告(如用括號包圍它們)。

這可能是(像許多其他會計事),雙列從很久以前發揚光大。將兩列相加然後從正數中減去負數總和以得到當前位置(相對於以混合方式進行加減)會更容易。但這是我的假設。

here見。

+0

已編輯的問題,問題是,1)將記錄存儲爲會計師喜歡它的雙重輸入!或者2)將記錄存儲爲單個條目,就像開發人員喜歡它一樣! :) – 001 2010-11-02 03:52:06

+1

請參閱我的鏈接。除非你的會計師要在原始數據中查看你的數據庫,否則不要考慮將它們分開:-)數據庫用於存儲數據,而不是呈現信息(忽略數據實際上可能是演示信息的可能性,但這是不是這裏的情況)。 – paxdiablo 2010-11-02 03:56:05

+0

它只有1個表,選項1,共使用4條記錄,而選項2只使用2條記錄。 – 001 2010-11-02 03:59:36