【问题标题】:Database schema design for financial forecasting财务预测的数据库模式设计
【发布时间】:2012-11-01 18:47:41
【问题描述】:

我需要开发一个允许公司预测财务状况的网络应用程序。

该应用程序有不同的屏幕,一个用于定义员工工资,另一个用于销售预测等。 基本上将一个excel财务预测模型变成一个应用程序。

问题是,设计数据库的最佳方式是什么,以便可以快速生成财务报告(例如损益表或资产负债表)?

  • 假设预测期为 5 年,您能否提供一张表格 5年*12个月=每行60个字段?是那个性能 够了吗?
  • 您是否会在单个员工数据发生更改时使用数据库触发器重新计算工资支出?

【问题讨论】:

  • 在全球范围内,您会发现并非每个金融部门都是由月份驱动的。我的第一个专业编程工作是构建软件来计算跨国公司的股东价值。我们必须适应十几个不同的会计期间。我认为某个地方每年有 7 个,但我可能是错的。那是很久以前的事了。

标签: database database-design accounting


【解决方案1】:

我认为最好将每个月的预测存储在自己的行中,如下所示

month   forecast
-----   --------
    1      30000
    2      31000
    3      28000
   ...       ...
    60     52000

然后您可以使用聚合函数来计算预测报告、贴现现金流等(例如,如果您想要仅 4 年的未贴现总数): SELECT SUM(forecast) from FORECASTS where month=>1 and month<=48

对于工资支出,我认为拥有一个动态计算的视图(或者如果您的数据库引擎支持“物化视图”应该有足够的性能,除非我们谈论的是大量员工或非常慢的数据库。

可能有一个工资历史表,当员工数据更改/工资单运行时会填充触发器

employeeId    month   Salary
----------    -----   ------
         1        1     4000
         2        1     3000
         3        1     5000
         1        2     4100
         2        2     3100
         3        2     4800
       ...      ...      ...

然后,您可以使用 SUM 或其他聚合函数来获取报告的数据。

【讨论】:

  • 创建数据库视图是个好主意!问题是每个月不会只有一个财务值,而是需要为报告计算的(用户定义的)数量的值。例如:在一月份,我需要存储收入、收入成本、工资、租金、利息支付等......这个列表是动态的,并且会从一个模型更改为下一个模型。
  • 好吧,对于每个模型,您可以有一个 Account Type 表,然后为数据创建一个表,其中包含 Month、AccountType 和 AccountValue 作为列。因此,对于每个月,您将有多行,每个帐户类型一个。所以“Jan 08”, 1(“Revenues”), $20000 "Jan 08", 2("Costs") $18000 等等。
  • 知道了。最后:如果我需要将所有这些数据加载到 javascript 网格中,它需要一个 json 格式 - 你将如何生成这个 json 数据?具体来说,网格会期望类似:{id: 1, data: ["Revenues", "200","210","220", ...]}, {id: 2, data: ["Costs", "50","60","70", ...]}。
  • 如果您真的想在数据库中完成所有操作,您可以创建一个视图,其中包含连接所有参数和 json 格式标记的单个文本列。但是在 javascript 中可能会更容易,在加载数据后可能有一些库可以将对象格式化为 json - 抱歉 - javascript 不是我的驾驶室。
  • 而且您可能必须使用数据透视才能将值放在一行上 - 取决于您的数据库引擎支持的内容
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 2012-01-05
  • 1970-01-01
  • 2010-10-17
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多