SQL ServerでNull値に対処する
はじめに
多くの開発者は、「Null」という用語をよく理解しているにもかかわらず、データベースでNull値をうまく扱えずにいます。データの有効性を保全するうえで、Null値に適切に対処することは重要です。少なくとも、Null値の処理を誤ると、データの誤りが生じます。この不良なデータを見逃すと、筋の通らないビジネス上の判断を下すことになりかねません。
Nullの概念は、よく誤って解釈されています。専門家によっては、Nullを無または空の値と表現することがあります。言い換えると、そのエンティティに何も値が入力されていないということです。また、Null値を不明な値と表現する専門家もいます。値が存在するかしないかは、今のところ不明だということです。ANSI規格に照らして言うと、Nullはデータ値ではなく、データがないことを示すインジケータです。
それでは、Nullの概念を実際のデータに当てはめてみましょう。例えば、新規顧客のレコードを確認中に、電話番号が表示されているにもかかわらず、ファックス番号や携帯電話番号が表示されていなかったとします。その時点では、新規顧客が実際にファックスや携帯電話を所有していないのか、単にデータを入力し忘れただけなのかは分かりません。適切に処理していれば、このNullに重要な意味を持たせることができたはずですが、単に不明というだけにとどまっています。
Nullを処理する
Nullを処理する方法に、どれが正しくてどれが誤っているという決まり事はありません。重要なのは意識と一貫性です。最初はテーブルレベルから始めます。例えば、適切に正規化されたテーブルでは、通常、電話番号型のNullは除外されます。そもそもユーザーが情報を入力するまでは、ファックス番号や携帯電話番号のレコードは作成されないからです。
しかし、すべてのNull許容型(nullable)を正規化で除外できるとは限りません。そのような場合は、値を必須とすることによって、列レベルでNull値を除外します。さらに、デフォルト値を設定するか、長さがゼロの文字列を許可するかを決める必要があります。しかしそれでも、いくつかはNull許容型の列にぶつかることになるでしょう。ビジネスルール上この問題を避けられない場合もあれば、レガシーアプリケーションでそのような列が使われている場合もあります。