私は、一連の証券のシナリオ分析を行う金融アプリケーションを開発しています。「シナリオ」は非常に単純で、特定の入力(私の場合、特にAとBの2つ)を受け取り、それらを「ショック」(つまり、10%、20%、30%などを掛ける)してから計算します。出力(約20の異なる出力メトリックがあります)。
これにより、次の4次元テーブルが作成されます。
- 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 ... ...
... ... ... ... ...
Table O
基本的に、PKが(security_id, A_shock_id, B_shock_id)
どこにA_shock_id
ありB_shock_id
、FKがである4次元テーブルをフラット化しましたTable S
。この方法の明らかな欠点は、他のショック可能な入力を追加したい場合は柔軟性がないことです(ショックを受けた入力は列としてハードコーディングされているため)。
このようなデータを表現するためのより柔軟で標準的な方法はありますか?それとも、これは正規化されたデータベースの制限ですか?