2011-09-18 61 views
0

我需要一些編碼建議,因爲我擔心我正在創建低效的臃腫代碼。Django webapp - 跟蹤財務賬戶信息

我有一個跟蹤公司的財務數據的web應用程序。我有一張名爲Accounts的表格,其中包含與收入,現金,應付賬款,應收賬款等典型財務賬戶相對應的記錄集合。這些記錄只是名字持有者被指定爲外鍵。

我也有一個名爲Account_Transaction的表格,它記錄Accounts中所有賬戶中所有賬戶的所有交易。本質上,Account_Transaction表格完成所有繁重的工作,同時指出各種帳戶被更改。

例如,當一個銷售而成,兩條記錄在Account_Transaction表中創建。一筆增加現金餘額的記錄和一筆增加收入餘額的記錄。

Trans Record 1: 
    Acct: Cash 
    Amt: 50.00 
    Date: Nov 1, 2011 

Trans Record 2: 
    Acct: Revenue 
    Amt: 50.00 
    Date: Nov 1, 2011 

所以,現在我有兩個記錄,但他們都指向不同的帳戶。現在,如果我想查看我的現金餘額,我必須查看每個Account_Transaction記錄並檢查記錄是否處理現金。如果是這樣,請添加/減去該記錄的數量並移至下一個記錄。

在一個典型的工作日,有可能是向上200-300交易的類似上面。因此,Account_Transaction表格將快速增長。幾個月後,表格可能會有幾千條記錄。當然,這對於數據庫來說並不多,但是,每次用戶想要知道應收賬款的當前餘額時,我都必須遍歷整個Account_Transaction表,以總結處理賬戶名稱「賬戶應收賬款」。

我不確定我是否以最優化的方式設計了這款產品。我曾考慮爲每個賬戶(一個用於「現金」,另一個用於「應收賬款」,另一個用於「收入」等等)創建一個不同的表格,但通過這種方法,我創建了15-20個具有完全相同參數的表格,而不是他們的名字。這似乎是糟糕的設計,所以我去了這個Account_Transaction想法。

這似乎是處理這種數據的適當方式嗎?有沒有更好的方式來做到這一點,我真的應該採用?

謝謝!

回答

1

爲什麼你需要通過所有記錄遍歷弄清楚的Accounts Receievable賬戶的狀態?我是否錯過了某些東西,認爲您不能僅僅使用Django ORM中的.filter來選擇性地選擇需要的記錄?

隨着記錄的增長,您可以爲報告添加一些日期過濾。在大多數情況下,您的會計師只需要本季度,月份等的數字,而不是整個歷史數據。

添加索引的列優化選擇,然後檢查了Django的aggregation從數據庫總結值。

最後,你可以做一些保守的緩存來加快「快速瀏覽」式報告的速度,因爲你只需要非常快的總數,但是你需要小心,避免誤報,重新設置緩存對記錄的任何改變都是必須的。

+0

因此,當我對查詢集執行篩選時,該操作不是太計算量太大?我打算使用過濾器運算符,但只是假設這將是一個總結一個帳戶的所有記錄的低效率方式。 在我尋找別人如何做這件事時,我遇到了一篇有趣的文章,討論如何最好地解決這個設計問題。對於其他可能會發現它很有用的人員:http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html – Garfonzo

+0

如果您已正確爲表格建立索引,則操作不會很重。你甚至可以通過Djangos模型語法指定索引,它會爲你設置它們。我認爲緩存結果在某些情況下也可以發揮作用,但是您需要對失效做出非常嚴格的規定。 – Bartek

0

你爲什麼不跟蹤精確可用量在Account表? Account_Transaction只能用於查看交易記錄。