1

私たちのDBには、絶えず挿入および更新されている数百万の行を持つ単一の中心テーブルがあります。このテーブルには、一意の識別子として機能する単一の列があり、このテーブルのコンテンツを1対多の関係を持つ複数のテーブルにリンクするために使用されます。

これは、たとえばUSERSテーブルにエントリを挿入すると、同じトランザクションでUSERS_PETSとUSERS_PARENTS(およびそれ以上)に、メインテーブルの同じ一意の識別子に基づいて複数の行が入力されることを意味します。

このDBを使用するアプリケーションは常に新しいエントリを挿入し、既存のエントリを更新するため、これらのテーブル間の関係はアプリケーションレベルでのみ保持されます(つまり、FK / PK減速を介してこれを処理する代わりに論理ERD)。

質問:

  1. これは、純粋なパフォーマンスの観点から、これが最善のアプローチであると想定するのは正しいですか?
  2. パフォーマンスに影響を与えることなく、これらのキーを設定する方法はありますか(DBがより自己記述的になるように)?
4

3 に答える 3

4

これは考えられる最悪のアプローチであり、最終的にデータの整合性の問題が発生することを保証します. データの整合性は、パフォーマンスよりもはるかに重要です。これは愚かで近視眼的です。

于 2011-02-18T16:22:07.853 に答える
2
  1. いいえ、同じ理由で、急いでいるときでも車の中でシートベルトを使用します. 違いはごくわずかであり、まったく価値がありません。
  2. 一部の特定の dbms ベンダーは、制約を強制せずに宣言する方法を提供する場合があります。たとえば Oracle では、Integrity Constraint State を として指定できますDISABLE NOVALIDATE
于 2011-02-18T16:27:43.337 に答える
2

データの整合性は希望に基づいています。希望はうまくスケーリングしません。

そして、「純粋なパフォーマンスの視点」などというものはありません。つまり、データベースから読み取らない場合を除きます。を挿入するだけで、決して更新せず、決して削除せず、決して読み取らない場合は、「純粋なパフォーマンスの観点」が存在すると主張できます。しかし、更新、削除、または読み取りを行う場合、パフォーマンスはポイントではありません。それはサーフェスまたはソリッドのようなものであり、挿入、更新、削除、および読み取りの間でバランス ポイントを移動することしかできません。

そして、これを読んでいる人はまだそれを理解していないため、読み取りパフォーマンスの最も重要な部分は正しい答えを返すことです. 正しい答えを保証できない場合、分別のある人は挿入がどれほど速くても気にしません。

于 2011-02-18T16:55:43.547 に答える