2011-01-05 10 views
21

私はRDBMSの「外部キー制約を強制する」の目的を知っています。しかし、それが "いいえ"に設定されているときに何か利点はありますか?Sql Server:「外部キー制約を強制する」が「いいえ」に設定されていると、どのような利点がありますか?

+0

2つのテーブルに同じ2つの主キーがあり、外部キー関係を作成する必要がある場合は、「外部キー制約を強制する」を「いいえ」に設定する必要があります。これはかなり混乱しているので、私は下のYouTubeのURLを与えている、あなたはこのビデオの最後の後に明らかになります。 https://www.youtube.com/watch?v=H7uGGg1BQ2Y –

答えて

21

通常の製造では、この設定はとなるべくNOに設定する必要があります。

しかし、あなたがデータベースを開発しているときや、データベースを再構築しているとき、大量の大量のデータを「サニタイズ」(クリーンアップ)する必要がある場合、外部キー制約をオフにして、「有効でない」データをテーブルにロードすることができます。もちろん、私が言ったように、あなたはその設定を長時間オフにしておかないといけません。データをクリーンアップし、FK制約に違反している行を削除するか、値を更新してください親行に一致するようにします。

「通常の」生産モードでは、この設定は決してNOであってはいけませんが、特定のタスクでは、より簡単に作業を進めるのに役立ちます。慎重にそれを使用して、できるだけ早くFK制約をオンに戻してください!

+0

ご連絡ありがとうございますが、たとえば、すべての定義済みのデータを説明するために、データを列に入力する状況があります。有効なデータが1,2,3の場合、それらのすべてを言うために-1を記入します。このような状況では、図の「外部キー制約の強制」をNOに設定する必要があります。右?それで本当に関係を作る必要がありますか? – odiseh

+1

@odiseh:いいえ、あなたのケースでは、それはまったく有用な目的を果たしていないので、外部キーを完全に削除する方が良いでしょう。代わりに、CHECK制約を作成してデータ値を検証することができます。 – sqlvogel

+3

+1のように言ってください。私が契約しているいくつかの企業では、この設定が常に乱用されています。一貫して問題につながる。存在するはずの外部キーがなくて追加したいときに中間ステップとして使用することがあると付け加えます。時には、すべての参照元アプリケーションが正しい順序で操作を実行しているとは確信していません。これにより、関係をすぐに定義したり、問題のアプリケーションをテストしたり、コードを検索したりできます。 –

3

私が知る限り、毎日の使用ではありません。私が外来キーをしばらくの間強制していない時は、データに問題があり、それを修正することが関係チェックによって犠牲にされた時です。

一括操作中に、パフォーマンスを向上させるために制約チェックが一時的に無視されます。

関連する問題