3

現在、既存の SQL サーバー データベースから読み取る mvc アプリケーションを開発しています。データベースは非正規化されています - そして、いくつかのテーブルを変更してある程度正規化することを検討していました。

これは、データを読み取るための最も優れた方法として、または構造を変更する必要があるかどうかについて、仲間の開発者との議論につながりました。データは、ストアド プロシージャを使用して ado.net 経由で読み取られます。私が持っている質問は、データを取得するために、テーブルに多数のフィールドがある (非正規化された) または内部結合 (正規化された) を持つ複数のテーブルを持つ方がパフォーマンスが高いですか?

テーブルに対するアクションは、95% が読み取り、5% が書き込みになります。

4

5 に答える 5

4

データ分析の目的で非正規化されたデータを使用し、集中的にレポートを使用する必要があります。上記の目的のために、非正規化を行うとパフォーマンスが向上します。

実装しようとしているアプリケーションについてあまり知識がなくても、「標準」のクライアント/サーバー アプリケーションでは、DOM で多くのクラスを操作し、データを常に読み書きする必要があるため、データの正規化に投票します。重複データを維持することはできるだけ避けてください。テーブルの設計を単純化して、ドメイン モデルを「快適に」使用できるようにしてください。

つまり、簡単に言えば、集中的なデータ読み取りのパフォーマンスを正規化し、ドメイン オブジェクト モデル クラスの集中的な読み取りと書き込みのパフォーマンスを非正規化 (およびより包括的) にします。

于 2012-10-17T22:01:14.933 に答える
1

レポートアプリケーション用に非正規化してください。

非正規化された構造がニーズに合う限り、それはより速くなります。

正規化されたデータベースからデータが入力されている場合は、すべて問題ありません。このデータベースを正規化しない場合でも、データ収集用に正規化されたバージョンを作成し、それを使用して現在の構造にデータを入力します。

あるデータベースからの収集とレポート作成を行うために必要な設計上の妥協点は、別のデータベースサーバーやある種の転送操作よりもはるかに多くの費用がかかることはありません。

于 2012-10-17T21:57:59.353 に答える
0

書くよりも読むことが多い場合は、非正規化をお勧めします。

読むよりも書くことが多い場合は、テーブルを正規化する必要があります。

よくわからない場合、または両方を組み合わせて使用​​する予定がある場合は、両方の構成でベンチマークまたは負荷テストを試して、どちらがアプリケーションに適しているかを確認してください。

于 2012-10-17T21:37:43.350 に答える
0

非正規化されたデータを取得することは良い選択です。なぜなら、結合の数が少ないため、ストレージはパフォーマンス コストよりも安価だからです。

于 2012-10-17T21:38:21.400 に答える
0

正規化とは、主に、メンテナンスを容易にし、必要なストレージを最小限に抑えるために、重複を排除することです。

非正規化は、主に特定のクエリのパフォーマンスを向上させるために行われますが、一部のデータ (通常は重要なデータ) が重複しているため、メンテナンスが少し面倒になり、ストレージ要件が増加します。

于 2012-10-17T21:39:07.603 に答える