非正規化されたインデックス付きビューで正規化されたテーブルを使用することは良い考えですか?

StackOverflow https://stackoverflow.com/questions/191642

質問

現在、高い読み取り:書き込み比率で新しいアプリを設計しています。私の現在の雇用主では、パフォーマンス上の理由から、テーブルに非正規化されたデータがたくさんあります。完全に3NFのテーブルを作成してから、インデックス付きビューを使用してすべての非正規化を行う方が良いでしょうか?テーブルまたはビューに対してクエリを実行する必要がありますか?

私が興味を持っているもののいくつかの例は、子テーブルの列の集合です(たとえば、ユーザー投稿カウントをどこかに保存するなど)。

役に立ちましたか?

解決

一般に、複数の正規化されたテーブルに頻繁にアクセスする必要がある場合は、非正規化されたビューを使用することをお勧めします。ほとんどの場合、結合を使用してテーブルに対して直接クエリを実行するよりも大幅にパフォーマンスが向上します。また、ビューまたは結合のいずれかがテーブルの一部の変更にとらわれないように記述できるため、通常はメンテナンス性が低下することはありません使用しません。

all テーブルが3番目の標準形式であるかどうかは別の質問です。私が答えを扱ったほとんどのアプリケーションでは、ほとんどのテーブルをこのように正規化する必要がありますが、例外があります。例外を作成するかどうかは、データの使用方法に関係しており、将来その使用が変わらないことについて非常に自信を持つことができるかどうかです。

間違った方法で行ったため、後で戻って再正規化するのはコストがかかる可能性がありますが、使いやすく理解しやすいデータを過剰に正規化すると、必要以上に複雑で保守が難しくなる可能性があります。走行距離は異なる場合があります。

他のヒント

ビューを使用して非正規化データをユーザーに提示する場合(およびSQL Serverを使用している場合)、SCHEMABINDING句をチェックアウトする必要があります。ビューがスキーマバインドされている場合は、インデックスを作成できます。インデックスは、基になるテーブルが更新されると更新されます。このように、インデックスが適切に設定されていれば、データを探している人は実際にインデックスから選択できるため、クエリごとに複雑なビューを再構築する必要はありませんが、ユーザーには最新の情報が表示されます基になるテーブルが変更される日付。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top