2020年11月15日 「8.1.1 「空」 は一者」 を読む >> 目次に もどる


 数学では、集合 M が メンバー (element、元) を一つも ふくまない場合でも、M を一つの集合をみなして、これを空集合 (null set、φ) と云います。当然ながら、空集合を メンバー とする集合 (すなわち、「集合の集合」、{ φ } ) を考えることができます──空集合を メンバー とする集合は、いわゆる一者 (存在) として扱います。空集合の述語的表現は、次のとおり──

    φ = ∃M ∀xP { ¬( x ∈ M ) }.

 日本語で言えば、「『M の メンバー がいない』 という集合が存在する」 ということです。

 空集合について大事な点は、「空集合は任意の集合の部分集合である」 という点です──この点については、次回 (「8.1.2 「空」 は部分集合」) で詳細します。そして、この点が リレーショナル・データベース の集合論演算では、null の扱いとして論点になる点です。

 直積集合の論理式を思い出してください。多項述語は集合論に翻訳でき、その一般式 (直積集合の一般式) は次のとおりです──

    R{ s1 ∈ X1, s2 ∈ X2,・・・, sn ∈ Xn ∧ P (s1, s1,・・・, sn) }.

 この直積集合の一般式は 「選択公理」 を使って説明できます──すなわち、「それぞれの 『空でない』 集合 (set) から、それぞれ一つずつ元 (element) を選んできて、それらの元を 『並べたら』[ P (s1, s1,・・・, sn) で示されている並び ]、それも集合 (tuple) となる」 ということ。リレーショナル・データベース は、直積集合を前提にしています。そして、リレーショナル・データベース 上、空集合は null として扱われています。

 リレーショナル・データベース 上、ひとつの column のなかに null が いくつか存在する場合の集合論演算について、私は 1980年代 リレーショナル・データベース を日本に導入普及したときから ズッと注意してきました──コッド 氏も 「SQL、致命的な欠点 3つ」 という エッセー (DATAMATION 紙) のなかで、構文論上の問題点として それを指摘しています。「3値論理」 では、null の論理的否定は null です (null = ¬null)。私が この点を指摘したとき、いわゆる 「データ 設計の専門家」 と云われている人たちから次のように非難されました──「佐藤正美さんは null に こだわりすぎる」 「現実世界では (画面で値を入力するとき) 任意入力として null が起こる (佐藤正美さんは 「null 撲滅主義者」 である)」 などなど。こういう大雑把な [ 思考を放棄した ] 非難を私は相手にはしたくないですね (笑)。私は、構文論上、null を扱うときに注意しなさいと述べているのであって、任意入力項目には null が生じることを私が知らないとでも思っているのかしら (笑)。私が論点にしているのは、モデル (論理的構造) 上、null には注意を払って対応をすると云っているのであって、null の存在を認めないとは 毛頭 云っていない──モデル TM は 2値論理を前提にして作られているので、null については それなりの配慮 (クラス を使った対応) を施しています。

 Null は、「状態」 を示しているのであって、「値」 ではない──コンピュータ業界では、現場の慣用として、「ヌル 値 (null value)」 という言いかたをしていますが、null は、あくまで 「状態」 を示すのであって 「値」 ではない。そして、null が示す 「状態」 は次の 2つです──

    1. undefined (存在しない)

    2. unknown (存在するが、未知数である)

 したがって、null を集合論演算で扱うのならば、4値論理 (true、fault、undefined、unknown) を前提にするのが正しい──コッド 氏は 4値論理を推奨しています。3値論理 (true、fault、null) では、null の 「状態」 が示されないし、null が 「状態」 であるので、null と他の値を比較することはできない。こんなことは論理を知っている人であれば、わかり切ったことではないか。 □

 




?
  << もどる HOME すすむ >>
  目次にもどる