DBのnull許可について

タグの編集
投稿者 刈谷勇@安部家の押入れ  (社会人) 投稿日時 2009/2/8 22:10:33
ほとんどのデータベースのカラムの指定でnot nullの指定できると思うのですが、皆さんはnot nullを指定しないことってありますか?

自分は、文字列型の場合は’’(空文字)値型は0にしています。(bool型でnullを指定したい場合は値型の小さい物を使って表現しています。)
理由としては、プログラムでの扱いが面倒な点です。
例えば、TextBoxに表示させる場合でも一度、DBNULLかを確認しなければならない、また、where条件も通常はカラム名=値で絞込みを行えますが、NULLの場合はis nullに変更しなければならない等です。

もちろん、どうしても使わなければならないときもあるとは思いますが、皆さんのご意見を聞かせてもらえればと思います。
投稿者 るきお  (社会人) 投稿日時 2009/2/9 06:45:54
こんにちは。

>皆さんはnot nullを指定しないことってありますか?
はい。あります。
つまり、NULL許可の列を作るということですよね。

>理由としては、プログラムでの扱いが面倒な点です。
>例えば、TextBoxに表示させる場合でも一度、DBNULLかを確認しなければならない、また、where条件も>通常はカラム名=値で絞込みを行えますが、NULLの場合はis nullに変更しなければならない等です。
Nullと空文字や0を区別する必要がないのでしたら、おっしゃるようにプログラムの扱いが面倒になるうえ、Nullと空文字・0の意味的な違いについても混乱を招くのでNullを不許可にしてしまってよいと思います。

しかし、仕様上やはりNullを許可した方が良い場合も少なからずあり結局Null許可を選択することもしばしばです。
たとえば、金額を入力しないで保存した場合と金額に0を入力して保存した場合を考えると、金額が未入力かどうか区別するためにはやはりNullを設定するのが一番素直に思えます。(区別する必要がなければNot Nullにして0を放り込むかもしれません)。

でも、刈谷勇さんのNullは面倒論には私も賛成です。Where句で = ではなく IS を使うというのは何とかしてほしかったと思いますし、Order Byで並び変えたときにNullが上にくるとか下にくるとかの既定地がSQL ServerとOracleで異なっていて苦労した記憶もあります。
意味的にはNullの存在は許容できるのですが、各種Null周りの仕様をもうちょっと使いやすくしてほしかったです。
投稿者 刈谷勇  (社会人) 投稿日時 2009/2/9 20:47:20
るきおさん、回答ありがとうございます。

>>皆さんはnot nullを指定しないことってありますか?
>はい。あります。
>つまり、NULL許可の列を作るということですよね。

自分の場合、全てのカラムがNot Null状態です。
数値については、0の場合は設定無しか本当の0という仕様で問題ないので・・・
(自社で使用するものなので、比較的この辺はゆるかったりしています。)


>Where句で = ではなく IS を使うというのは何とかしてほしかったと思いますし、

そうなんですよね、Where句の件はどうにかしてほしいですよね。


>Order Byで並び変えたときにNullが上にくるとか下にくるとかの既定地がSQL ServerとOracleで
>異なっていて苦労した記憶もあります。

これは知りませんでした。
nullの並び順の規定って、SQLの規約には無いんですかね?

上記のWhere句の件も含めて、SQLの次期の規約を作るときに考えてほしいですよね。


>各種Null周りの仕様をもうちょっと使いやすくしてほしかったです。 

こちらは、マイクロソフトさんにはぜひともがんばってもらいたいものです。
(といっても、Express Editionを使っている身分でえらそうなことはいえませんが)(^^;