用于投资组合/风险管理的头寸和交易数据库设计

问题描述

我正在设计一个数据库,用于跟踪股票交易和实时投资组合持有量。系统应该能够在自定义时间段内(例如日末持有量)提取历史头寸。我当前的设计包括一个交易表和一个实时头寸表,当每笔交易被预订到数据库中时,它将自动触发实时头寸表的更新。我打算对事务表使用Postgresql和TimescaleDB扩展。

我对如何实现历史馆藏的功能感到困惑,因为可以通过将具有时间戳记t的交易汇总在一起来得出作为特定时间戳记<=t的历史馆藏。我应该使用单独的表格来记录历史资产还是简单地进行汇总?我还考虑在每天结束时使用二进制文件存储实时头寸快照,以支持历史头寸查询

我在数据库设计方面经验很少,因此任何建议/帮助都值得赞赏。

解决方法

这个问题缺乏细节,所以我的回答很笼统。

您可以做的一件事情是有两个表:一个用于详细数据,另一个用于聚合。然后,您每天都会从前者计算出一条记录。对明细表使用分区可以轻松删除旧数据。

如果数据结构允许的话,您也可以对两者使用相同的表(分区表)。然后,您每天都会计算一条新的聚合记录,删除当天的分区,并扩展“聚合”分区的分区边界。

请仔细考虑是否需要TimescaleDB扩展。如果它提供您知道自己需要的好处,那就去做。如果没有,请不要使用它。几乎没有依赖关系总是很高兴。仅仅因为您存储时间序列数据并不意味着您需要TimescaleDB。