2015年10月19日月曜日

SQL ServerのNULLと空白

SQL ServerではOracleとは違って文字列型の空白とNULLを厳密に区別するので
注意が必要です。

って、何を今更って感じですよね。

しかしながらDBとアプリケーションの設計段階で
文字列型のNULLと空白の扱いについてきっちり決め事を作っておかないと、
あとになって苦労するのも事実…。

値が無い場合、NULLにするのか空白の文字列にするのか
(空白の文字列は厳密に言うと値が無いわけではありませんが)

個人的には(クライアントアプリの開発者としては)、
文字列型項目は必ずnvarcharでNOT NULL制約をかけておいて、
なにかしら値をいれておくほうが扱いやすいと感じています。
また、最初からNULLを許容しなければ開発でぶれることがないですよね。

デメリットとしては以下のようなことがあります。
・SQLで文字列型項目に対してISNULL関数が使えなくなる。
・いくら全項目にNOT NULL制約をかけていても外部結合や
 集計関数でNULLがSELECTされることがある。

前者はCASE式で我慢できますが、
後者はNOT NULL制約かかってるから大丈夫~という頭で開発してると
はまりやすい罠なんではないでしょうか。
リレーショナルDBを扱うということはまさにNULLとの戦いといっても過言ではありません。
(ここまでくると文字列型だけに限定した話ではなくなってしまいました。)

どちらにせよ、最初に方針を決めて、決まりは厳密に守って開発する。
これに尽きます。