NULL とブランクは違います。 | 踏まれたり蹴られたり...._| ̄|○

踏まれたり蹴られたり...._| ̄|○

「踏んだり蹴ったり」って....あーた、被害者なら「踏まれたり蹴られたり」ってのが正しいんぢゃない??日本語ってばむつかしい...._| ̄|○  (BTW, ついでに、人も指せない「足の親指のトナリの指」を何て呼べばしっくりくるのか、教えてヱライひとっ!!)

以下、システム屋的備忘録。



顧客 DB (= お客様カード) に、旧姓というフィールド (= 欄) があったとして
独身の女性がこのカードを最初に書いた時に旧姓欄には 「NULL (= 値ナシ)」 がセットされているのね。

で、この人が携帯番号を変更した時に書き換えるのは、そのカードの 「携帯番号欄」 だけでいいワケさ。
なのに、わざわざ奴らは旧姓欄に 「空白」 をセットしてるの。
てか、全フィールド (= 全部の欄) を書き換えてる結果、「そうなっちゃってる」 の。

さて。 ここでモンダイが発生するワケだよ。

独身の人をお客様カードから拾い出したい時に 「旧姓欄が NULL の人」 って検索方法を使ってるもんだから
最初に書いてから一度もカードを書き換えてない独身の A さんはこれに引っ掛かるんだけど
携帯番号を書き換えた独身の B さんはこの検索から漏れちゃうの。

カードだけ見たら A さんも B さんも旧姓欄には何も書いてないんだよ。
でも、一度も更新してない A さんの旧姓欄は、NULL (= 値ナシ) で大丈夫なんだけど
携帯情報を更新した B さんの旧姓欄は、 空白という値が入ってる (= 値アリ) から
B さんのほうは 「旧姓欄 = 値ナシ」 って条件からハズレちゃうの。 空白、という、値、のせいで。


この場合の回避方法は 2 つ。

更新時 (= カードを書き換える時) に、更新する欄だけ書き換える (= 他の欄は書き換えない) 前提を守るか
判断の時に、「値ナシ (= NULL)」 または 「空白という値」 なら対象とする、という条件にするか。
(念のために両方やっておけば間違いない。 ホントは。)

「空白で更新」 した上に 「NULL かどうか」 の判断しかしないと、思ってる結果と違っちゃうんですね。


んでもって、NULL をセットするのと、「null という文字」 をセットするのも意味が違います。

「NULL (= 値ナシ)」 と 「null という文字 (= 値アリ)」 は
「NULL (= 値ナシ)」 と 「空白という文字 (= 値アリ)」 以上に 「見た目からして」 違うのです。


お気をつけあそばせ。