我需要一些编码建议,因为我担心我正在创建效率低下的臃肿代码。
我有一个跟踪公司财务数据的网络应用程序。我有一个名为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
这个想法。
这似乎是处理此类数据的合适方式吗?有没有更好的方法来实现我应该采用的?
谢谢!
答案 0 :(得分:1)
为什么需要遍历所有记录才能找出Accounts Receievable
个帐户的状态?我错过了一些想法,你不能只使用Django ORM中的.filter
来选择性地选择你需要的记录吗?
随着记录的增长,您可以在报告中添加一些日期过滤功能。在大多数情况下,您的会计师只需要本季度,月份等的数字,而不是整个历史数据。
为该列添加索引以优化选择,然后检查Djangos aggregation以汇总数据库中的值。
最后,您可以进行一些保守的缓存来加速“快速查看”样式报告的速度,您只需要非常快速地想要总数,但是您需要小心这一点以避免误报,因此重置缓存对记录的任何改变都是必须的。
答案 1 :(得分:0)
为什么不跟踪Account
表中的确切可用金额? Account_Transaction
只能用于查看交易记录。