2021年 1月15日 「8.2.2 null と 3値 logic」 を読む × 閉じる


 Null については、すでに述べてきているので、そちらを参考にしてください ( 「「8.1.1 「空」 は一者」 を読む」)。2値論理 (true と false の 2値を前提にした論理) と 4値論理 (true、false、undefined、unknown の 4値を前提にした論理) では null の扱いは明らかなのですが、3値論理 (true、false の値と null を前提とした 3値論理 )では null の扱いが厄介な問題を引き起こします── null は 「状態」 (undefined と unkown の二つの状態を示す) であって 「値」 ではない、ただ null-value と言い方が慣用として使われているので null を 「値」 だと思っている プログラマ が多いようです。というのは、リレーショナル・データベース も コンピュータ 言語も 3値 (true、false および null) を前提にしているので。

 本節では、3値論理において null が どのような規約で使われるのかを 「真理値表」 を使って説明しています。3値論理における null の規約は特に次の 3点に注意してください (以下、true と null を それぞれ T と N を使ってあらわします)──

  (1) N の論理的否定は N である (¬N = N)。

  (2) T かつ N は、N である (T ∧ N = N)。

  (3) T または N は T である (T ∨ N = T)。

 3値論理では、N を否定しても N なのです。
 そのために、null であることを示すために、昔 (大型汎用機が全盛のとき)は、null には high-value (FF) を充填して、単なる スペース (space character) と識別していました。ただ、プログラマ の入門者は、null を 2値論理の感覚で扱っていて、null の論理的否定は 「null ではないこと (なんらかの値が入っていること)」 と思っているようです (苦笑)──もう一度言いますが、3値論理では null を否定しても null なのです。ですから、SQL では null が いくつか存在する column に対して not exist とか not in を避けてください。ちなみに、私が或る SE から聞いた話では、データベース の ベンダー のなかには、null に対して ゼロ (0 の値) を充填して null に対応しているそうですが、そんな対応は演算 (構文論上) では null を回避できても 意味論上 ゼロ に なんの 「意味」(事実的な真) があるのか意味不明ですね (苦笑)。 □

 




  × 閉じる