我正在开发一个对一堆证券进行情景分析的金融应用程序。“场景”非常简单,它们采用某些输入(在我的情况下,特别是两个,比如 A 和 B)并“冲击”它们(即乘以 10%、20%、30% 等)然后计算输出(我有大约 20 种不同的输出指标)。
这会产生一个 4-d 表,其中:
- x 轴是输入 A 的冲击(10%A、20%A、30%A 等)
- y 轴是输入 B 的冲击(10%B、20%B、30%B 等)
- z 轴是 20 个不同的输出指标
- w轴是不同的证券
我想将此表保存到数据库(oracle)中。我这样做的方法是有 2 张桌子:
Table S
对于输入的冲击水平(百分比)Table O
安全与输出
这是每个表的样子:
Table S
-------------------------
shock_id shock_value
0 0%
1 10%
2 20%
3 30%
4 40%
... ...
Table O
--------------------------
security_id A_shock_id B_shock_id output_1 output_2
1 0 0 1.2 2.3
1 1 0 1.34 3.52
1 2 0 2.4 3.98
1 3 0 3.42 5.31
1 4 0 23.2 133.1
1 0 1 2.2 32.1
1 0 2 23.1 4.2
1 0 3 ... ...
... ... ... ... ...
基本上我已经将 PK 的 4-d 表弄平了,Table O
是(security_id, A_shock_id, B_shock_id)
whereA_shock_id
和B_shock_id
are FKs to Table S
。这种方式的明显缺点是,如果我想添加其他可冲击输入,它不灵活(因为冲击输入被硬编码为列)。
有没有更灵活/标准的方式来表示这样的数据?或者这是规范化数据库的限制?