web-dev-qa-db-ja.com

金融データベースのスキーマ

私の会社は、ゼロから金融データベースを構築することを目的とした新しいイニシアチブを開始しています。

次のように使用します。

  • 時系列分析:会社の財務データ(例:長期にわたるIBMの固定資産の合計)、集計(例:材料セクターの長期にわたる総固定資産)など。
  • 単一企業のスナップショット:単一企業のさまざまなデータポイント
  • 単一の時間枠、通常は当日の複数のデータフィールドにわたる複数の会社の分析。
  • アイデアやカスタム要素のバックテスト、ランク分析、データ分析など。

データのおおよその幅:

  • 3000社
  • 3500データフィールド(例:固定資産、収益などの合計)
  • 500の集約レベル

周期性:毎日、毎月、四半期ごと、毎年

時間とともに成長する20年間のルックバック

質問: PostgreSQLデータベースでは、どのスキーマを使用する必要がありますか?現在、完全に正規化されたDBのデータフィールドのカテゴリごとに、会社ごとに1つの時系列テーブルを考えています。たとえば、IBMのすべての貸借対照表フィールドの1つのテーブル、IBMのキャッシュフローアイテムの別のテーブルなど、すべてのデータカテゴリと各企業のテーブルです。レコードとしてのタイムスタンプと列/フィールドとしてのデータフィールド。次に、高速なクエリのために、完全に正規化されていないが、上記の私のユースケースのクエリ用に最適化されたウェアハウスやビューなどを作成します。ただし、上記の会社とフィールドの数を見てみると、テーブルの幅がかなり広い場合、ベースとなる財務データだけで200,000を超えるテーブルができてしまいます。それはたくさんのテーブルですが、それを行うための別の良い方法はありません。

この質問をするのにより良い場所がある場合は、私に知らせてください。

さらに情報が必要な場合は、質問を編集して追加します。

PS-私はSO Quantサイトで同様の質問をしましたが、スキーマのヘルプはあまり得られませんでした。また、スキーマに焦点を当てていない答えは大丈夫ですが、私はヘルプを探していることに注意してくださいスキーマ設計はこちら。

5
mountainclimber

これは、3つまたは4つのテーブルを作成することで実現できます。

  1. 企業情報
  2. 基本エントリー
  3. 基本データ
  4. MarketCap Data(オプション)

会社情報には、すべての会社に関する情報が含まれ、会社IDを各会社に割り当てます。これは、後で財務フィールドに参加するために使用されます。要件に基づいていくつかのSCDタイプ(緩やかに変化するディメンション)を使用します。ティッカーなどのフィールドは頻繁に変更されます。そのため、会社IDを慎重に割り当ててください。

財務データをアンピボットし、エントリと値の間で分割します。

Fundamental Entriesテーブルで、会社IDと財務エントリごとに一意のID(ID_FS_ENTなど)を生成します(これは、期末、会計基準、会計期間などの組み合わせになります)。

財務データテーブルに、ID_FS_ENT、フィールド名(発行済み株式、固定資産の合計、収益など)とともに財務値を格納します。

各会社の1日の時価総額も受け取っている場合は、個別に保存します。もう一度、会社IDを使用して、このテーブルに取引日と値を追加します。

お役に立てれば!

追伸私はすでに同様のデータベースを管理しており、78か国以上の経済圏で10万社以上の企業と約1億の財務エントリを管理しています。

5
aholkar

Hive をご覧ください。このタスクにはぴったりです。また、時系列データ用の特別なタイプのデータベースがあります。しかし、RDBMSを使用する場合は、それが最良の方法だと思います。

  1. 通常モデルを作る
  2. パフォーマンスをテストするためのデータの読み込み
  3. パフォーマンスを向上させるためにデータを非正規化またはシャーディング
1