2016-04-08 38 views
1

我正在設計一個數據庫,它將保存事務級別的數據。它的功能與銀行賬戶相同 - 借記/貸記賬戶號碼。交易彙總的最佳實踐數據庫設計是什麼?

什麼是獲得這些交易的最佳/最有效的方式。

我在考慮使用匯總表,然後將這些彙總表添加到當前交易列表中,以便推導出每個帳戶有多少(即有餘額)。

我希望這是可擴展的(即10億交易),所以不希望執行數據庫命中主要事實表,因爲它需要找到所有與期望的帳號關聯的借/貸款掃描潛在的十億行。

謝謝,任何幫助或資源將是真棒。

回答

3

(已在銀行工作了近10年,以下是實際工作情況)。

TLDR:你的想法很好。

每隔一段時間您都會將餘額存儲在其他地方(「結轉餘額」)。例如。每個月左右(或者一定數量的交易)。要計算實際餘額(或過去的任何餘額),您必須累積所有相關的交易,直到您保留的最近餘額(「結轉餘額」),當然您需要添加。

「當前」餘額不保存在任何地方。如果你一直更新這個平衡,就一個人就可以解決鎖定問題。 (在真實銀行中,幾乎每一筆交易都會觸及一些銀行的內部賬戶,有很多銀行內部賬戶可以獲得法律要求的數字,這些賬戶非常頻繁地出現,因此當您出現鎖定問題時每個交易都要更新它們,而每筆交易只是插入 - 即使結轉餘額只是插入)。

而且在現實的銀行,你有許多用例,這使得這種方法更有利:

  • 由於能夠在任何時間取回日餘額 - 能根據不同日期的任何時間獲得餘額(例如價值日期與交易日期)。
  • 逆轉/取消是它自己的樂趣。想象一下,在兩週前扭轉交易,仍然保持以上所有情況。

你看,這是一個很長的故事。但是,您的問題的答案是:是的,您無法累積越來越多的交易,您需要保留中間餘額以限制必要時積累的數量。打到有限數量的行的主表,應該沒有問題。

確保您的主要查詢使用Index-Only Scan

+0

感謝您的回答。你的回答很有意義,我認爲有一個類似的過程。在從「結轉餘額」表和最近交易清單中獲得餘額的方面,您只需使用工會將所有工資放在一起,而不是將彙總應用於合併集以獲得個人餘額。謝謝你的幫助 – Jimmyn

-3

做一個面向對象的設計,創建對象的例子帳戶,交易等。這是一個很好的website供您參考。但網上討論OODBMS的內容還有很多。我提供的參考資料僅僅是我開始做OODBMS時的基礎。