テーブル設計-ストックデータとフローデータ-

ストックとフローについて

ストック 日々の業務で発生したデータを一定期間で集計したデータ
フロー 日々の業務で発生するデータ

テーブル設計でのストックデータ

ストックデータは日々の業務で発生したデータを集計したデータになります。
そのため、テーブル設計の冗長なデータを排除するという考えからいうと、ストックデータを登録するテーブルは必ずしも必要ではありません。

しかし、実際の業務では、膨大な量のデータを処理する必要があります。
そのため、毎回フローデータから集計を行い、ストックデータを作成した場合、十分なパフォーマンスが得られません。

結果として、業務システムでは、フローデータを登録するテーブルと、フローデータの集計結果であるストックデータを登録するテーブルを作成することがあります。

ストックデータテーブルがあると便利な時

  • 今月のデータの集計に前月の繰り越し情報が必要となる場合

前月の情報が今月の集計で必要となる場合は、フローデータのみの場合は、最初の月までさかのぼって集計が必要となる場合があります。
しかし、毎月月末時点の情報をストックデータとして登録しておくことで前月の繰り越しデータはストックデータから取得できるようになります。
そのため、前月の繰り越し情報が今月のデータ集計に必要となる場合に、今月のデータを集計したうえでストックデータから前月の情報を加算するだけで今月の集計が可能となります。

  • 1日数万件という大量のデータを、毎月1回集計する必要がある場合

月1で日々の業務データを集計した場合、1日数万件のデータが発生する場合は、1か月で数十万件のデータを集計することとなります。
そのため、日々のデータを毎日集計し、ストックデータとして登録することで、システムの負荷を分散することが可能となります。

ストックデータテーブルを作成する際に気を付けること

ストックデータは日々の集計で発生したフローデータを集計したものとなります。
そして、フローデータが修正された場合、ストックデータも修正される必要があります。

そのため、もし、ストックデータを作成後にフローデータが変更される可能性があるのであれば、フローデータが修正された場合の登録済みストックデータの扱いについて検討をしておく必要があります。
もし、フローデータ変更時の検討が不十分であった場合、日々のデータと集計結果との間に不整合が発生することになります。

ストックデータの作成するタイミング

フローデータからストックデータを作成するタイミングとしては、夜間バッチを用いることがよくあります。
なぜなら、夜間には、日々の業務で発生するデータが発生しないことが通常だからです。

また、ECサイトなど24H365日動いているようなシステムの場合は、オンバッチでデータの整合性を取りながら、ストックデータを作成する場合もあります。

DB設計を学びたい方へ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

実践的データモデリング入門 (DB magazine selection)

実践的データモデリング入門 (DB magazine selection)

絵で見てわかるシステム構築のためのOracle設計 (DB Selection)

絵で見てわかるシステム構築のためのOracle設計 (DB Selection)