SQLにおけるNULLの危険性について
こんにちは、jjj0331です。、
今回はSQLのNULLに関する特性や。デメリットについてご紹介したいと思います。
本記事を通してNULLの危険性を理解し、NULLの撲滅に共感して頂けると幸いです。
NULLを使う目的
SQLでNULLが挿入される目的は
データを挿入しなければならないが、一部の列の値がまだ決まっていない場合に「無」「不明」の意味を込めてNULLを挿入します。
SQLがNULLを持ち込んだことにより、3値論理を持ち込まざるをえなくなり大きな混乱を生み出しました。
3値論理とは、真理値が「true」「false」の2つの値だけではなく、「unknown」という第三の値を持つ理論体系を指します。一般的なプログラムが2値論理を採用していることからSQLの3値論理が多くのプログラマーの混乱をまねくことになりました。
NULLを許容したことによるデメリット
SQLでは仕方なくNULLを許容することはありますが、
極力NULLの使用は避けたほうが良いです。
それは、NULLのデメリットが大きすぎるためです。
- 条件式を書く場合に、3値論理を考慮する必要がある
- 「is NULL」「 is not NULL」と書かないとNULLを判定できない
- 四則演算や関数の引数にNULLがあると期待値が得られない
- DBMSによりNULLの扱い方が異なる
- Oracleの場合、is NULLを使用するとインデックスが使用されない
NULLを撲滅するために
- 値が決まっていない場合を想定しあらかじめ未定コードを用意しておく
- 数字列の場合は0で代用 ※0と不明を分けなくてもよい場合
- 列にNOT NULL制約を宣言する
それでもNULLは撲滅できない
すべてのテーブルにNOT NULL制約を宣言したとしても、NULLは発生します。
外部結合やCUBEを使用することで簡単にNULLは入り込んできます。
というわけで、
SQLを使う上で、NULLは避けられないので、常に気を付けましょう