2010-12-11 52 views
15

將事務處理條目存儲到雙重條目會計數據庫中。數據庫設計:會計事務處理表

我想出了兩個解決方案選項1和選項2,我被告知大多數銀行包爲他們的數據庫設計選擇選項2。不過,我更喜歡選項1而不是選項2,因爲它非常有意義,而且效率更高!

即,對於資金的兩次轉移,選項1需要2條記錄,選項2需要4條記錄。

我想知道爲什麼銀行會選擇期權2而不是期權1?這是什麼原因?

Option 1) 
TRANSACTION 
Credit_AccountId 
Debit_AccountId 
Amount 
... 

Option 2) 
TRANSACTION 
AccountId 
Amount 
... 

回答

17

從插入的角度來看,選項1可能會更高效一些。但由於很多會計交易將影響兩個以上的賬戶,所以收益可能遠低於2:1。

對於這些更復雜的交易,選項2將更加清晰。也就是說,會計師通常會發現三排

  • 扣款$ 100
  • 信用B $ 60
  • 信用C $ 40

超過兩行

  • 借記更清晰$ 60 Credit B $ 60
  • 借方A $ 40貸方C $ 40

如果您在雙方都有多個帳戶,那麼也不清楚如何將借方和貸方與單個帳戶相匹配。也就是說,

  • 借記US $ 100
  • 借記B $ 30
  • 信用C $ 60
  • 信用d $ 70

可以表示爲

  • 借記甲$ 60學分C $ 60
  • 借方A $ 40信用d $ 40
  • 借記B $的抵免額d $ 30

但也有其他可能的方式來構造數據爲數據模型2.

此外,選項2將是如果更有效的您正試圖通過彙總交易來確定特定賬戶的當前餘額。

+0

謝謝,我可以看到你的觀點複雜的交易。 – 001 2010-12-11 06:02:47

+0

謝謝你的回答@Justin Cave,請你幫我解答當前的餘額欄,我們使用模型2進行交易,並且還有一個帳戶表和餘額欄。餘額字段在每個事務之後更新,對於併發問題,我們在帳戶表上使用了行級鎖。每一件事情都很好,直到我們需要使用兩階段提交,這是由於多平臺Java和.Net,以及...我們面臨着很多帳戶表暫停鎖定。特別是「交易等待鎖定」。 DBA正在手動終止會話並刪除鎖定。設計不正確? – 2013-06-30 14:09:25

+0

@ M.Heydari - 這看起來更適合一個新的問題 - 評論不是真正適合擴展討論的地方。我不會在交易系統中維護一個總值。如果您確實發現聚合是絕對必要的,請使用物化視圖。 – 2013-06-30 18:09:50

5

在一般會計數據庫設計中,將借方和貸方存儲在單個字段(即選項2)中是合乎邏輯和高效的,因爲這可以簡化彙總,數字操作和報告。每個借記和貸記交易都應該有一個日期時間字段來過濾特定的時間段。從Smashwords獲得這本書,標題爲會計數據庫設計。它提供了一些關於會計系統設計的好例子和一些有趣的財務報告sql查詢。

+0

這是一個很好的方法,但它不夠,因爲它不是會計的默認模型。 – B4NZ41 2010-12-15 19:16:05