かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

NULL問題の解決策、「そもそもNULLを登録させない」

time 2016/04/11

NULL問題の解決策、「そもそもNULLを登録させない」

ORACLEにおけるNULLの扱いには注意が必要であるという話を前回の記事で解説しました。

扱いを間違えると、障害にもつながるNULLですが、その解決策の一つとして「NULLを登録しない・させない」ということについて、本記事で紹介します。

sponsored link

NULLを登録しないためには

代替値を入れる

未知や不明、適用不能、非存在にNULLを入れたいところですが、その場合に代替となる値を入れるようにします。

例えば、顧客マスタの性別項目であれば、1(男性)/2(女性)/0(不明・法人)といったように定義し、NULLを入れないようにルール化します。

NOT NULL制約

代替値を入れる方法だけでは、入れようと思えばNULLを入れることが可能なため、例えば正規のプログラム以外で直接テーブルを更新された場合などにNULLが入りこんでしまう可能性があります。

項目にNOT NULL制約をつけることで、強制的にNULLを登録させないようにすることが可能です。

既存テーブルに、NOT NULL制約をつける場合は、既存データにNULLが存在していないことが条件です。存在している場合、エラーとなります。

デフォルト値の設定

デフォルト値を設定すつことで、NULLを登録しようとした時に代替値を代わりに登録させることが出来ます。

例えば、顧客マスタの性別項目にNULLを登録しようとした時に、自動的に0(不明・法人)を代入するといったことです。

既存テーブルに、デフォルト値をつける場合、既存データのNULLはNULLのまま変わらないので注意。

NULLを登録しないことのメリット・デメリット

メリット

NULLを登録しないとルール化することで、条件指定時や取得したデータを使う時にNULLの考慮をする必要が無くなります。

NULLの場合の考慮が不要となることで、コーディングやテストの工数が減らすことが出来ますし、何よりNULLの扱いを誤ったことで障害になることが無くなります。

デメリット

逆にデータを登録する時に考慮が必要になります。

例えば、上記した顧客マスタの性別項目であれば、1(男性)/2(女性)/0(不明・法人)といったように、NULLを入れたいようなケースの代替値を決めて、徹底する必要があります。

また、NOT NULL制約をつけた場合、意図せずNULLを登録しようとした場合、SQLエラーとなり即障害となる可能性もあります。
そのエラー制御のため、逆にNULLの場合の考慮を徹底しなければならず、コーディングやテストの工数の増加となります。

現実的には

現実的には、全項目にNOT NULL制約をつけるといったことはあまりしません。デメリットの方が大きくなるためです。

コード項目やフラグ項目等、制御や条件としてよく使うような項目に絞って、NOT NULL制約をつけることが多いです。

まとめ

悩ましいNULLに対する対策として、「NULLを登録しない・させない」という解決策について見てきました。
しかし、それはそれでデメリットもあるため、全てが解決というわけにはいきません。

多少負荷は軽減されるかもしれませんが、NULLの取り扱い注意は必須ですね。

関連

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link