2009-04-29 6 views
0

愚か者と呼ばれる危険性があるので、私はあなたの考えがMS SQL DB内の関係の制約を維持することにあると思っています。DBの移行:リレーションの制約を維持しますか?

システムをASPから.NET環境に移行しています。これにより、ビジネスオブジェクトやその他の層別コーディング手法がもたらされ、ユーザー/ APIからデータベースを抽象化することができます。新しいアプリケーションには、Entity Framework DALの上に明確なAPIがあります。

古いデータベースのアプリケーションDBが大きく、一部のテーブルの目的がファイルの形式などでバイナリデータを含むように変更される予定です。これらを別々のDBに分割したいと思っていますディスクスペースが重視されるクライアントサイトでの管理が容易になります。

テーブル間のリレーションシップ制約を保持するための値はありますか?

仮定:

  • コードは関係が重要である
  • をテストされ、実行はDBへ
  • のみアクセスAPI経由で、第三者による他のアクセスがサポートされていないトランザクションの下で行われます。制約を維持するための

理由:

  • データ構造を強制JOINを高速化していますか?
  • クエリプランの支援ですか?新しい.NETバージョンで制約を削除する

理由:

  • 一つは、API/BIZロジックは、このような親/子としての関係を管理することを想定することができます。
  • 私はSQLが中に追加のチェックを行う必要があることを信じるに修正アム
  • (システムは、プラグインアーキテクチャを使用して構築され、ほとんどのテーブルが孤立して動作することができる)他のカタログにDBのセクションをオフハイブに機会を減らし制約をINSERTすると、DB上のAPIがこれを管理しているときに不要なことがありますか?

私はこれが起こるのを待っているだけで悪夢であれば、私は...

多くのおかげで、

ネイサン

+0

ところで、愚かな疑問のようなものはありません。ですから、愚か者と呼ばれることについて心配しないでください。そうでないと(少なくとも、すべきではありません)起こります。すべての正直なところで。私はこの制約の問題も自分自身に尋ねました。 – pyrocumulus

+0

実際、あなたは正しいです。 1人がペダントの怒りを恐れる! リンクにもありがとうございました。それは検索ではありませんでした。私の質問に入力すると、優れたAJAXy検索です。 –

答えて

1

も、この質問を参照してください。一意キーと主キーのみが行います。ほとんどの場合、私はFKの列に一致する "子"のインデックスを持つことをお勧めしますが、外部キーはありません。彼らは

  1. あなたのデータの整合性を適用します(私はバグを持つと仕事をするために失敗BLで何回もかましました)として それにもかかわらず、私はまだFKEYSをお勧めします。
  2. データのパターンに関する詳細情報をオプティマイザに与えると、実行計画がより迅速かつ迅速になる可能性があります。

しかし、ほとんどの場合、データを1つのデータベースに保存することを考えましたが、複数のファイルグループに分割することを考えましたか?複数のDBにまたがる外部キーの手間をかけずに、より柔軟なディスクスペース管理を実現することができます

+0

ありがとうございます。私は少し私の答えを改訂しました。 dbエンジンはFKにインデックスを自動的に追加しないかもしれませんが、どちらの場合もプランナはプランニングのために情報を使用するため、ほぼ同じ結果になります。 – pyrocumulus

+0

ファイルグループに関する良いアイデア。私は彼らが存在することを知っていたが、私はDBAではないので見落とした。リレーションシップを維持し、ファイルグループを使用するのに適しています。ありがとう。 –

2

を馬鹿に何かを逃したりしている場合には、とにかくコミュニティー時に私の質問を投げますはい、関係の制約を維持することをお勧めします。確かにBLLでそれらを処理する必要がありますが、クエリをより効率的に処理するためにクエリプランナによって使用されるため、制約によってパフォーマンスが向上します。私は、制約は、「自動的にインデックスされている」という主張をサポートしていませんAre foreign keys really necessary in a database design?

1

はい、そうでない特別な理由がない限り、テーブルに外部キー制約が必要です。あなたのアプリケーションがテストされても、データベースに書き込む唯一のものではないかもしれません。 FKはすべてのソースからのデータに対して参照整合性を強制します。

外部キーは、データベース内の関係のための非公式のドキュメンテーションツールとしても機能します。 FKがデータベースに存在する場合、私はVisio(またはリバースエンジニアリングをサポートする他のツール)を使用してスキーマを設計し、その関係を見ることができます。パフォーマンス名のデータベースに外部キーをドロップすることは、データベーススキーマを明らかにするためにISVが使用する一般的な手法であり、より多くのサポート収益をもたらします。

特定のパフォーマンス関連の問題を外部キーにトレースすることができる場合は、そのキーを削除する必要があります。これは、1つまたは2つの特定の大容量表の少数のキーでのみ発生する可能性が高くなります。また、トランザクション量が非常に多いシステムでは、これが必要になる可能性が常に高いです。データベースに外部キーを全く持たないことは決してありません。

関連する問題