私の会社は、ゼロから金融データベースを構築することを目的とした新しいイニシアチブを開始しています。
次のように使用します。
データのおおよその幅:
周期性:毎日、毎月、四半期ごと、毎年
時間とともに成長する20年間のルックバック
質問: PostgreSQLデータベースでは、どのスキーマを使用する必要がありますか?現在、完全に正規化されたDBのデータフィールドのカテゴリごとに、会社ごとに1つの時系列テーブルを考えています。たとえば、IBMのすべての貸借対照表フィールドの1つのテーブル、IBMのキャッシュフローアイテムの別のテーブルなど、すべてのデータカテゴリと各企業のテーブルです。レコードとしてのタイムスタンプと列/フィールドとしてのデータフィールド。次に、高速なクエリのために、完全に正規化されていないが、上記の私のユースケースのクエリ用に最適化されたウェアハウスやビューなどを作成します。ただし、上記の会社とフィールドの数を見てみると、テーブルの幅がかなり広い場合、ベースとなる財務データだけで200,000を超えるテーブルができてしまいます。それはたくさんのテーブルですが、それを行うための別の良い方法はありません。
この質問をするのにより良い場所がある場合は、私に知らせてください。
さらに情報が必要な場合は、質問を編集して追加します。
PS-私はSO Quantサイトで同様の質問をしましたが、スキーマのヘルプはあまり得られませんでした。また、スキーマに焦点を当てていない答えは大丈夫ですが、私はヘルプを探していることに注意してくださいスキーマ設計はこちら。
これは、3つまたは4つのテーブルを作成することで実現できます。
会社情報には、すべての会社に関する情報が含まれ、会社IDを各会社に割り当てます。これは、後で財務フィールドに参加するために使用されます。要件に基づいていくつかのSCDタイプ(緩やかに変化するディメンション)を使用します。ティッカーなどのフィールドは頻繁に変更されます。そのため、会社IDを慎重に割り当ててください。
財務データをアンピボットし、エントリと値の間で分割します。
Fundamental Entriesテーブルで、会社IDと財務エントリごとに一意のID(ID_FS_ENTなど)を生成します(これは、期末、会計基準、会計期間などの組み合わせになります)。
財務データテーブルに、ID_FS_ENT、フィールド名(発行済み株式、固定資産の合計、収益など)とともに財務値を格納します。
各会社の1日の時価総額も受け取っている場合は、個別に保存します。もう一度、会社IDを使用して、このテーブルに取引日と値を追加します。
お役に立てれば!
追伸私はすでに同様のデータベースを管理しており、78か国以上の経済圏で10万社以上の企業と約1億の財務エントリを管理しています。
Hive をご覧ください。このタスクにはぴったりです。また、時系列データ用の特別なタイプのデータベースがあります。しかし、RDBMSを使用する場合は、それが最良の方法だと思います。