以下、システム屋的備忘録。
顧客 DB (= お客様カード) に、旧姓というフィールド (= 欄) があったとして
独身の女性がこのカードを最初に書いた時に旧姓欄には 「NULL (= 値ナシ)」 がセットされているのね。
で、この人が携帯番号を変更した時に書き換えるのは、そのカードの 「携帯番号欄」 だけでいいワケさ。
なのに、わざわざ奴らは旧姓欄に 「空白」 をセットしてるの。
てか、全フィールド (= 全部の欄) を書き換えてる結果、「そうなっちゃってる」 の。
さて。 ここでモンダイが発生するワケだよ。
独身の人をお客様カードから拾い出したい時に 「旧姓欄が NULL の人」 って検索方法を使ってるもんだから
最初に書いてから一度もカードを書き換えてない独身の A さんはこれに引っ掛かるんだけど
携帯番号を書き換えた独身の B さんはこの検索から漏れちゃうの。
カードだけ見たら A さんも B さんも旧姓欄には何も書いてないんだよ。
でも、一度も更新してない A さんの旧姓欄は、NULL (= 値ナシ) で大丈夫なんだけど
携帯情報を更新した B さんの旧姓欄は、 空白という値が入ってる (= 値アリ) から
B さんのほうは 「旧姓欄 = 値ナシ」 って条件からハズレちゃうの。 空白、という、値、のせいで。
この場合の回避方法は 2 つ。
更新時 (= カードを書き換える時) に、更新する欄だけ書き換える (= 他の欄は書き換えない) 前提を守るか
判断の時に、「値ナシ (= NULL)」 または 「空白という値」 なら対象とする、という条件にするか。
(念のために両方やっておけば間違いない。 ホントは。)
「空白で更新」 した上に 「NULL かどうか」 の判断しかしないと、思ってる結果と違っちゃうんですね。
んでもって、NULL をセットするのと、「null という文字」 をセットするのも意味が違います。
「NULL (= 値ナシ)」 と 「null という文字 (= 値アリ)」 は
「NULL (= 値ナシ)」 と 「空白という文字 (= 値アリ)」 以上に 「見た目からして」 違うのです。
お気をつけあそばせ。