Django webapp - 跟踪财务帐户信息

时间:2011-09-18 04:57:54

标签: django database-design

我需要一些编码建议,因为我担心我正在创建效率低下的臃肿代码。

我有一个跟踪公司财务数据的网络应用程序。我有一个名为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这个想法。

这似乎是处理此类数据的合适方式吗?有没有更好的方法来实现我应该采用的?

谢谢!

2 个答案:

答案 0 :(得分:1)

为什么需要遍历所有记录才能找出Accounts Receievable个帐户的状态?我错过了一些想法,你不能只使用Django ORM中的.filter来选择性地选择你需要的记录吗?

随着记录的增长,您可以在报告中添加一些日期过滤功能。在大多数情况下,您的会计师只需要本季度,月份等的数字,而不是整个历史数据。

为该列添加索引以优化选择,然后检查Djangos aggregation以汇总数据库中的值。

最后,您可以进行一些保守的缓存来加速“快速查看”样式报告的速度,您只需要非常快速地想要总数,但是您需要小心这一点以避免误报,因此重置缓存对记录的任何改变都是必须的。

答案 1 :(得分:0)

为什么不跟踪Account表中的确切可用金额? Account_Transaction只能用于查看交易记录。