3

Timesheet アプリケーション用の Oracle データベースを設計しています。テーブル(マスターとチャイルド)に外部キー制約が本当に必要かどうか疑問に思っています。

理論的には、テーブルに適切な参照整合性を持たせることは良いことですが、本当に必要なのでしょうか?

外部キーは、FK の整合性をチェックする必要があるため、すべての DML 操作でデータベースを特別に機能させると聞きました。これにより、パフォーマンスが低下する可能性があります。しかし、一方で、子テーブルに新しい行を挿入する前に主キーが削除された場合に役立ちます。

タイムシート アプリケーションの主な問題はパフォーマンスであり、月末には (おそらく同時に) 約 250 人がタイムシートを埋めます。

テーブルに外部キー制約がない場合、毎回子テーブルに新しいレコードを挿入する前に、主キーがマスターテーブルに存在するかどうかを最初に (ストアドプロシージャで) チェックする必要がありますか?

追加:過去に、私は多くの経験豊富な Oracle データベース開発者と協力してきましたが、テーブルに外部キー制約を使用したことはありません。

4

5 に答える 5

14

外部キー制約を設定してアプリケーション開発し、パフォーマンスを測定します。パフォーマンスが問題になる場合は、FK制約がある場合とない場合のDBの違いを測定し、パフォーマンスの問題であることが判明した場合は、削除することを検討してください。彼ら。

それらがパフォーマンスの問題の原因であることに気付く可能性は低いので、パフォーマンスの向上につながると推測して、最初から完全に省略することはお勧めしません。

入力を検証したり、安全ベルトを着用したりする必要がないのと同じように、それらは必要ありません。

于 2012-07-02T12:26:38.760 に答える
4

参照整合性を使用すると、キー列が挿入または更新されるときにパフォーマンスがわずかに低下します。ただし、これはほとんどの場合、

1) 信頼できる一貫したデータ

2)クエリ時間の大幅な改善

しかし、実際には、参照整合性を強制しないのであれば、いったいなぜ参照データベースを使用するのでしょうか?

于 2012-07-02T12:40:40.777 に答える
3

データの一貫性とクエリのパフォーマンスに関して他の人が言ったことに加えて...

データベースに外部キーがあることもドキュメントです。テーブルがどのように関連するかを理解するために、コード ベースをくまなく調べる必要はありません。これは、データベース内のテーブルの数が増えるか、そのデータにヒットするアプリケーションの数が増えるにつれて (または、コードにアクセスできず、データを理解する必要がある場合)、より重要になります。

于 2012-07-02T13:45:35.107 に答える
3

外部キーが強制されることを保証する方法 (たとえば、sp またはトリガー) は、少なくとも参照制約と同じくらい遅くなります (はるかに遅いと予想されます)。より高速な唯一の可能性は、アプリケーションにバグがまったくないこと、および失われた参照が作成されていないことを確認することです。これはいくつかの理由で難しすぎます:

次のシナリオを考えてみましょう: テーブル A にはテーブル B を参照する列があり、あるユーザーが B に行を挿入し、誰かがそれを A で使用する前に削除することを決定します... 一方、別のユーザーが既に挿入フォームを開いていますB の行で満たされたコンボボックスを持つ A。彼がこの A を保存すると、間違った B を参照する可能性があります。これを防ぐための自然なアーキテクチャは見当たらず、リレーションシップ自体よりも高速になる可能性があります。

好きなだけ例を挙げていくことができますが、要するに、アプリケーション アーキテクチャでの私の経験から、スキーマ レベルの制約を可能な限り維持し、家族と過ごす時間を増やすことができます。

于 2012-07-02T12:57:17.050 に答える
1

私の2セント... 250人は心配する必要はありません。データベースは、膨大な量のデータと参照を処理できます。それが彼らの目的です。キーと構造を作成するときは、明らかに頭を使います。しかし、悪夢のようにレポートを作成する時間とは対照的に、適切なキーを使用して正確なデータを取得できます...そして一日の終わりには...それがあなたが説明したようなアプリケーションのポイントです.データ入力を容易にして支援し、データの正確性を強化します。

于 2012-07-02T12:32:12.233 に答える