2009-09-01 20 views
10

主キーを参照する外部キーにPostgreSQLデータベースでNOT NULL制約が必要ですか?
データベースは非常に標準化されており、非常に大きくなります。上記のクエリが不要な場合、クエリをさらに遅くする特別な制約を追加することは望ましくありません。PKを参照する外部キーにNOT NULL制約が必要ですか?

+1

アプリケーションのスピードは正確性よりも重要ですか?あなたは、ヌルでないチェックの費用を認識しません。あなたの質問に対する答えは「いいえ」ですが、わかっている制約があればそれを指定します。 –

答えて

11

あなたはそれが価値を持っている必要がある場合、それがNULLでない作る、それがNULL可能にする、その後、そのテーブルのFK列に不明を表すことができるようにしたい場合。

あなたがnullのFK値の参照テーブルに必要な数だけレコードを持つことができます。ユニーク制約は、参照テーブル(FKがある場合)の行にない参照テーブル(PKがある場合)の行にあります。

+1

これは正しいです。別の言い方をすると、それは1:Nの関係か0:Nの関係かをモデル化するかどうかによって異なります。すなわち、関係は任意であるか? –

+0

1:1の関係。私が取り組んでいるテーブルはブリッジテーブルです。 – WolfmanDragon

+1

それが1:Nならば、FK列はNot Null制約を持つべきです(SHOULD)。 –

-1

主キーは一意である必要があり、理想的には、同時実行の問題を制限するために、データベースによって選ばれるべきで、そう、それが一意であることができますが、1つのレコードに対して、他のすべてのレコードが値を持っている必要があります。

そうでない場合は、どのように複数の一致がある場合は、この外部キーが関連どの行知っているのだろうか?

ので、新しい街で述べたように、NULLが有効である必要がありますが、1つのレコードに対して、一意性として大きな問題になります。

編集:おっと、ご質問を誤解しました。私が前に外部キーにnullを入れているが、あなたはカスケードは、例えば削除持っている場合は、NULL値を持つ主テーブルのキーを持っていない限り、NULLが、動作しません

+2

OPは_FOREIGN_キーの "not null"制約について質問していました – ChssPly76