2012-12-05 86 views
0

我正在創建一些財務軟件。在這樣的軟件中,不僅要了解領域的當前價值,而且要了解領域的價值是什麼,誰做出了改變以及什麼時候改變,所以人們可以回顧歷史,例如看看誰犯了犯罪。數據庫設計查看對每個值進行的交易

我的問題是創建這樣一個設計的最佳實踐是什麼?我使用的DBMS是PostgreSQL。當然,這將是大部分訪問的每個字段的當前值。另外,只需對值進行更改即可進行記錄,以便進行快照備份似乎不是執行此操作的適當方式。

我試着搜索「日記」和「交易歷史」,但沒有結果。

+0

所有好設計保持交易表單獨...交易表正是它聽起來像..我不知道你的領域是什麼,但在該表中,每一行代表一個交易..即存款,一個退出或轉移 –

+0

@BhrugeshPatel這聽起來像是一個巨大的表,這將使它成爲一個非常昂貴的查詢,以查看某個特定表單元格的歷史記錄。 – David

+0

當然它會很大。您可以根據您的需求和性能歸檔舊數據。您可以進一步保存一個存儲短期數據和整個表格的閃存表,以保留所有數據直到上一個歸檔點。但是這樣做會造成更多的工作,因爲您要存儲兩次相同的數據(雙重數據損壞風險)。有了索引和高效的查詢,你應該沒問題。再次,我不確定你的數據加載,所以我不能推測太多。 –

回答

1

Martin Fowler在他的書「分析模式」中描述了金融交易系統的設計 - 這是關於OO設計的,而不是數據庫設計,但值得一讀。

傳統的方法是創建表示「臺賬」表,內容大致如下:

transactionID | AccountID | TransactionDate | TransactionValue | OtherData... 
------------------------------------------------------------------- 

在任何時間點的平衡是「TransactionValue」的直至該日的總和。

的確,這些表格往往會變得非常大 - 但像Postgres這樣的數據庫在管理大型數據集方面非常有效。實際上,只要您可以依靠良好的索引方案,您就可以輕鬆管理現代硬件上的數十億或數億記錄。

如果你碰到一個性能極限,常見的解決方案是創建摘要條目 - 讓您將所有的記錄達到一定日期爲存檔表,並插入該日期簡要記錄。根據您的數據量,您可能會在十年,一年,一個月甚至一週內完成此操作。