パフォーマンスのためにトランザクション データベース内のデータを非正規化する場合、(少なくとも) 3 つの異なるアプローチがあります。
正規化されたトランザクション データと非正規化されたレポート/分析データの両方を更新するストアド プロシージャを介して更新をプッシュします。
セカンダリ テーブルを更新するトランザクション テーブルにトリガーを実装します。これは、ほとんどの場合、履歴を維持するときに取られるルートです。
処理を夜間のバッチ プロセスに延期し、データ マート/ウェアハウスに ETL を実行する可能性があります。
この質問の目的のために、オプション 3 は実行できないと仮定しましょう。これは、ドメインでは非正規化されたデータが正規化されたデータと常に一致している必要があるためです。私が頻繁に扱う階層集計は、その一例です。
私は最初の 2 つのアプローチの両方をかなり使用してきましたが、最近はトリガーベースのアプローチに傾倒していますが、まだ発見していない「落とし穴」があるかどうか疑問に思っています。この質問をする価値があるので、将来長期的な決定を下すときに心に留めておくべきいくつかのアイデアがあります.
あなたの経験では、リアルタイムの非正規化データを維持するという特定の目的のために、どちらのツールの長所と短所は何ですか? どのような状況でどちらか一方を選択しますか?その理由は?
(PS「トリガーが複雑すぎる」や「すべての更新は常にストアドプロシージャを通過する必要があります」などの回答はしないでください-質問のコンテキストに適したものにしてください。)