【发布时间】:2012-12-12 03:41:27
【问题描述】:
我正在开发一个金融应用程序,用于对一堆证券进行情景分析。 “场景”非常简单,它们采用某些输入(在我的情况下,特别是两个,比如 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 为 Table O 的 4 维表展平为 (security_id, A_shock_id, B_shock_id),其中 A_shock_id 和 B_shock_id 是 Table S 的 FK。这种方式的明显缺点是,如果我想添加其他可冲击输入,它不灵活(因为冲击输入被硬编码为列)。
是否有更灵活/标准的方式来表示此类数据?还是这是规范化数据库的限制?
【问题讨论】:
-
你说,“基本上我已经通过引入 2 个外键来扁平化 4-d 表......”不,你没有。您的“扁平化”结构与直接在“表 O”中使用冲击值(我假设为 0.10、0.20 等)的结构之间基本上没有区别。
-
好点,你。编辑以实际说出我的意思。
标签: sql oracle normalization