2016-06-30 2 views
1

クライアントのデータベースには、他の多くのテーブルの有用な情報を要約するスナップショットテーブルがいくつかあります(各期間の各顧客の状態など) 。外部キーを使用するスナップショットテーブルと実数値を使用するスナップショットテーブル

ただし、スナップショットテーブルには、ほとんどが元のテーブルへの外部キーが含まれています。したがって、スナップショットに関する有用な情報を得るためには、それらを対応するテーブルに複数回結合する必要があります。そして、これらの結合はしばしば非常に長くかかる。一方、データベース内のすべてのFL列(またはクエリ内の少なくともWHERE句の列)にインデックスを追加すると、データベースの速度が大幅に低下します。

私の質問は、外部キーの代わりに実際の値を持つスナップショットテーブルを持つ方が良いのではないでしょうか?そして、もし答えが否定的であれば、元のテーブルが更新されていればスナップショットテーブルの目的を破ることはないでしょう(例えば、 'キャンドル'と呼ばれていて、今は 'ランプ'はスナップショットが一貫していますが、ケース?)

+1

あなた自身を尋ねる:いくつかのエントリが削除されたらどうなりますか? FKを含むスナップショットは、もはや – lokusking

+0

@lokuskingと全く同じものになります。本当の価値があるのは理にかなっていませんか? – Disasterkid

+1

これは意味をなさない唯一のものです。 – lokusking

答えて

1

あなたが言及した理由のために、私はFK値ではなく実際のデータを保存する傾向があります。つまり、この履歴データを関連する属性(IEディメンション)と共に再配置し、分析のために再構成する方がよい場合があります。 Data warehousingは確かにこれのための解決策ですが、これらは非常に大規模なプロジェクトになる可能性がありますので、価値を理解し、適切に範囲を設定する必要があります。ただし、キャプチャしようとしている特定のイベントをターゲットとする軽量スタースキーマでも、トランザクションベースのテーブルとの関係を持つ大きな履歴テーブル(特に関連テーブルに対するクエリロジックが複雑な場合) 。

関連する問題