仕事でちょっと話題になったので、備忘録として残しておきます。
話題になったのはNOT NULLかNULLなのかという話題でした。
キー制約について
データベースでは基本的に、以下のような3つのキー制約があります。
- PK(プライマリーキー、主キー制約)
- UK(ユニークキー)
- FK(外部キー)
今回はこのUKについてです。
UK自体にはNULL制約はないよ
ユニークキー制約は、NULLを許容しNULL以外の値での一意制約をかける制約です。
従って、単純にUK制約だけ入れた場合はNULLを入れることができ、複数のレコードでNULL値を設定できます。
仮に、UKでNULLを許容したくない場合は、NOT NULL制約を入れる必要があります。
NULLも含めて一意制約と扱うDBMS
実はNULLを重複させることができるか?についても、DBMSによって異なる。
これも注意する必要がある。
DBMS | NULLの重複 |
---|---|
Oracle | ○ |
Mysql | ○ |
SQL Server | × |
MYSQLでNULLを強要したくない場合の注意点。
NOT NULLは後で付与する必要があります。
結論
- UK自体はNOT NULLではありません
- NULLを重複できるかは、DBMSによる。
- NULLを許容したくない場合は、NOT NULL制約をカラムに定義する必要がある