2011-07-28 6 views
-1

(PostgreSQLでは)カラムがnullでなければならないという制約を設定することは可能ですまたはに別のカラムの値を別のテーブルに格納することはできますか?言い換えると、CHECK制約とFOREIGN KEY制約を組み合わせることですか?列がNULLか他の列を参照するかどうかを確認するための制約?

私が定義したいのは、列がNULL またはに別の列の値を含める必要があるということです。この場合の目的は、ユーザーが選択した言語がサポートされている言語のリストに含まれているかどうか、または設定されていないことを確認することです(nullのままにします)。

ので(動作しない)この行で何か:MarcBさんのコメントを1として

ALTER TABLE MyTable ADD CONSTRAINT my_constraint 
CHECK (languageCode IS NULL) OR (languageCode) REFERENCES Languages (languageCode) 
+3

外部キーを作成し、そのフィールドをNULLにすることができます。外部キーのターゲットはnullにはできませんが、ソースは確かに可能です。 –

+0

Marcさん、ありがとうございました。 –

答えて

2

:外部キー拘束NULLが可能な列には、あなたが尋ねただけで何を行います。

しかし、一般に「複雑な」制約を適用する最も一般的な方法は、ロジック(ブール値を返す)でスカラー関数を作成し、その関数をチェックすることです(チェックする値を渡すか、 、またはあなたのニーズに合ったもの)。

関連する問題