7

この質問の当然の帰結として、一度に 1 つのテーブルに常にアクセスするために RDMBS を使用して結合の最適化と体系的な非正規化を行うことの利点について相談し、伝えることができる優れた比較研究があるかどうか疑問に思っていました。

具体的には、次の情報が必要です。

  • パフォーマンスまたは正規化と非正規化。
  • 正規化されたシステムと非正規化されたシステムのスケーラビリティ。
  • 非正規化の保守性の問題。
  • 非正規化によるモデルの一貫性の問題。

私がここでどこに行くのかを見るためのちょっとした歴史: 私たちのシステムは社内のデータベース抽象化レイヤーを使用していますが、それは非常に古く、複数のテーブルを処理することはできません. そのため、すべての複雑なオブジェクトは、関連する各テーブルで複数のクエリを使用してインスタンス化する必要があります。システムが常に単一のテーブルを使用するようにするために、テーブル全体で体系的な非正規化が使用され、場合によっては 2 ~ 3 レベルの深さでフラット化されます。nn 関係に関しては、データ モデルを慎重に作成して、そのような関係を回避し、常に 1-n または n-1 にフォールバックすることで、問題を回避したようです。

最終結果は、顧客がしばしばパフォーマンスについて不満を述べる、入り組んだ過度に複雑なシステムです。そのようなボトルネックを分析するとき、彼らはシステムが基づいているこれらの基本的な前提に決して疑問を抱かず、常に他の解決策を探します.

私は何か見落としてますか ?私は全体の考えが間違っていると思いますが、どういうわけかそれを証明 (または反証) するための反論の余地のない証拠を欠いています.アプローチは間違っています(一貫したデータモデルについて、私があまりにも妄想的で独断的であることを私に納得させます)。

私の次のステップは、独自のテスト ベンチを構築して結果を収集することです。

---- 編集注 : システムは最初、データベース システムのないフラット ファイルで構築されました...クライアントが Oracle を使用するシステムを主張したため、後でデータベースに移植されました。リファクタリングは行わず、既存のシステムにリレーショナル データベースのサポートを追加しただけです。フラット ファイルのサポートは後に削除されましたが、データベースを活用するためのリファクタリングをまだ待っています。

4

2 に答える 2

2

考え: 明らかなインピーダンスの不一致、つまり 1 つのテーブルのみにアクセスできるデータ アクセス レイヤーがありますか? ここでやめてください。これは、リレーショナル データベースの最適な使用法とはまったく矛盾しています。リレーショナル データベースは、複雑なクエリをうまく処理できるように設計されています。単一のテーブルを返す以外にオプションがなく、おそらくbausinessレイヤーで結合を行うことは意味がありません。

正規化の正当化と潜在的な整合性コストについては、Codd 以降のすべての資料を参照してください。ウィキペディアの記事を参照してください。

この種のベンチマークは終わりのない活動であり、特殊なケースがたくさんあると私は予測しています。正規化は「正常」であると主張します。人々はクリーンなデータベース設計から十分なパフォーマンスを得ることができます。おそらく、アプローチは調査かもしれません:「あなたのデータはどのくらい正規化されていますか?スケール0から4まで」。

于 2009-08-02T08:52:57.757 に答える
1

私の知る限り、次元モデリングは、その背後に何らかの理論がある体系的な非正規化の唯一の手法です。これは、データ ウェアハウス技術の基礎です。

DM は、1997 年に Ralph Kimball によって「A Dimensional Modeling Manifesto」で開拓されました。Kimball は多くの本も書いています。一番評判が良さそうな本は「The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling (Second Edition)」(2002)ですが、まだ読んでいません。

非正規化によって特定の種類のクエリのパフォーマンスが向上することは間違いありませんが、他のクエリが犠牲になります。たとえば、(典型的な e コマース アプリケーションで) Products と Orders の間に多対多の関係があり、特定の Order の Products を最速でクエリする必要がある場合、データを次の場所に保存できます。それをサポートするための非正規化された方法で、何らかの利益を得ます。

しかし、これにより、特定の Product のすべての Orders を照会することがより厄介で非効率的になります。両方のタイプのクエリを作成する必要性が等しい場合は、正規化された設計に固執する必要があります。これは妥協点であり、どちらのクエリも同様のパフォーマンスを提供しますが、どちらも 1 つのタイプのクエリを優先する非正規化設計の場合ほど高速にはなりません。

さらに、非正規化された方法でデータを保存する場合、一貫性を確保するために追加の作業を行う必要があります。つまり、偶発的な重複や参照整合性の破損はありません。一貫性のために手動チェックを追加するコストを考慮する必要があります。

于 2009-08-02T23:05:12.773 に答える