金融数据库架构

mou*_*r11 5 schema data-warehouse database-design timestamp

我的公司正在启动一项旨在从头开始构建财务数据库的新计划。

我们将通过以下方式使用它:

  • 时间序列分析:公司的财务数据(例如:IBM 一段时间内的固定资产总额)、聚合(例如:材料部门一段时间内的固定资产总额)等。
  • 单一公司快照:单一公司的各种数据点
  • 在单个时间范围内(通常是当天)跨多个数据字段分析多家公司。
  • 想法和自定义因素的回测、排名分析、数据分析等。

数据的大致范围:

  • 3000家企业
  • 3500 个数据字段(例如:固定资产总额、收益等)
  • 500 个聚合级别

周期:每日、每月、每季度、每年

20 年的回顾会随着时间的推移而增长

问题:在我们的 PostgreSQL 数据库中,我们应该使用什么模式?现在我正在考虑每个公司的一个时间序列表,完全规范化数据库的每个数据字段类别。例如,一个表用于 IBM 的所有资产负债表字段,另一个表用于 IBM 的现金流项目等,用于所有类别的数据和每个公司。时间戳作为记录和数据字段作为列/字段。然后对于快速查询,创建一个仓库和视图等,它们没有完全规范化,但针对我上面列出的用例的查询进行了优化。但是,如果您查看我上面的公司和领域的数量,如果我的表格很宽,我可能会得到超过 200,000 个表格,仅用于我的基本财务数据,这也不是很好。这是很多表,但我没有看到另一种好的方法来做到这一点。

如果有更好的地方问这个问题,请告诉我。

如果您需要更多信息,我很乐意编辑我的问题并添加它。

PS - 我在 SO Quant 网站上问了一个类似的问题,但没有得到太多的架构帮助。此外,非模式集中的答案是可以的,但请注意,我正在寻求模式设计方面的帮助。

aho*_*kar 5

您可以通过创建 3 或 4 个表来实现此目的:

  1. 公司信息
  2. 基本条目
  3. 基本数据
  4. 市值数据(可选)

公司信息将包含有关所有公司的信息,为每个公司分配一个公司 ID,稍后将用于加入财务字段。根据您的要求使用一些 SCD 类型(缓慢变化的维度),像 Ticker 这样的字段经常变化。所以仔细分配一个公司ID。

在条目和值之间反转和划分您的财务数据。

在基本条目表中,为每个公司 ID 和每个财务条目(这将是期末、会计准则、会计期间等的组合)生成一个唯一的 ID(例如 ID_FS_ENT)。

在财务数据表中存储财务价值以及 ID_FS_ENT、字段名称(即流通股数、固定资产总额、收益等)

如果您还收到每家公司的每日市值,则将其单独存储。再次使用公司 ID,将交易日期和值添加到此表中。

希望这可以帮助!

PS 我已经在管理一个类似的数据库,其中包含超过 78 个经济体的 100,000 多家公司和大约 1 亿个财务条目。