3

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

私が興味を持っている例のいくつかは、列の子テーブルの集計です (たとえば、ユーザーの投稿数がどこかに保存されています)。

4

2 に答える 2

3

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

すべてのテーブルが第 3 正規形であるべきかどうかは別の問題です。私が取り組んできたほとんどのアプリケーションでは、ほとんどのテーブルをこの方法で正規化する必要がありますが、例外があります。例外を設けるかどうかは、データがどのように使用されるか、およびその使用が将来も変わらないという確信が持てるかどうかに関係しています。

間違った方法で何かを行ったために後で戻って再正規化しなければならないことはコストがかかる可能性がありますが、単純に使用して理解できるはずのデータを過度に正規化すると、必要以上に複雑になり、保守が困難になる可能性があります。あなたのマイレージは異なる場合があります。

于 2008-10-10T14:59:21.397 に答える
3

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

于 2008-10-10T15:00:53.283 に答える