2002年10月 1日 | 同一の サブセット と相違の サブセット | >> 目次 (テーマ ごと) |
● QUESTION | 同一の サブセット と相違の サブセット では、なぜ、記述方法はちがうのか。 | |
▼ ANSWER | null に注意するため。 | |
2007年10月16日 補遺 |
サブセット の記述は、同一の サブセット では 「=」 を使い、相違の サブセット では 「×」 を使う。
べつべつの記号を使う理由は、「null」 に対して注意を促すためである。
コッド 博士 (Codd, E.F.) は、1970年代に、セット・アット・ア・タイム 法を考えて、[ キー (indexing) および レコード を使った mechanism とはちがう --物理的には、ポインター を使わない--] データ 構造として テーブル 構造を使い、テーブル に対して column 単位の アクセス 手法 (RDB) を提示した。 コッド 博士は、1980年代後半に、「SQL の致命的な欠点 (Fatal Flaws)」 という論文を公にして、IBM 社の SQL が (2値 ロジック [ 真と偽のふたつの値 ] を前提にしていて) 「maybe (null)」 を扱っていないと非難した。「null」 は多義 (unknown と undefined) なので、コッド 博士は、4値 ロジック [ 真・偽・unknown・undefined ] を使った。
たとえば、直積集合 R (a, b) において、以下を考えてみる。
(a, b) は 「tuple (集合)」 である。 たとえば、従業員番号の集合から 01 を選んで、部門 コード の集合から A を選んで、以下のような tuple (順序対) を生成する (つまり、従業員 01 は部門 A に配属されている)。 R (01, A). 同様にして、従業員 02 は部門 B に配属され、従業員 03 は部門 A に配属されている、とすれば--従業員 03 が、従業員 01 と同じ部門 A に配属されているので、部門 A は 全射である点に注意されたい--、以下のような順序対が生成される。
R (02, B).
さて、ここまで示せば、セット・アット・ア・タイム 法が、column 単位に アクセス する理由を理解できるでしょう。すなわち、従業員番号の column にある値 (メンバー) は従業員番号の集合 (セット) から選択され、部門 コード の column にある値 (メンバー) は部門 コード の集合 (セット) から選択されている。それぞれの column (メンバー) は、それぞれの集合 (セット) から選択され、こういう column 単位の アクセス のことを セット・アット・ア・タイム (set-at-a-time)--セット 単位の縦列の アクセス--という。 さて、従業員番号 04 は、「どの部門にも配属されていない」 とする。 R (04, null).
つまり、従業員番号 04 は、この リレーション (関数) では充足的ではないことになる(!) 以上にようにして、データ・モデル のなかでは--少なくとも、述語論理と集合論を使った データ・モデル のなかでは--、「null」 は 「致命的な欠点」 になる。したがって、「null」 に対しては、「適切な」 措置を施さなければならない。もし、「null」 を認めるのであれば、コッド 博士が示したように 4値 ロジック を使わなければならない。しかし、実地の システム 作りでは、はたして、プログラム を4値 ロジック で作成しているかしら。 それを注意するために、T字形 ER手法では、サブセット (部分集合) を生成するときに、「相違」 の サブセット を意識的に生成するようにしている。 上述した従業員 モデル では、部門 コード を、タプル のなかで、あたかも、直積集合のように扱っているが、正確に言えば、部門 コード は、包摂関係のなかで挿入される コード である。Null を、単純に示すために、正確性を犠牲にして、部門 コード (R) を使ったので、ご了承ください。 |
[ 補遺 ] (2007年10月16日)
「null」 に関しては、以下の 2つの対応のいずれかを導入するしかないでしょうね。
(1) 「null」 を認めないで、2値 ロジック を使う。 構文論上、「null」 を認めて 3値 ロジック を使うことは、「null」 の使いかた次第では、unexpected な アウトプット がでる危険性を孕んでいます。というのは、3値 ロジック では、null の論理的否定 (¬ null) は、null として扱われるので、もし、アルゴリズム のなかで、「¬ null」 がでてくる文があれば、思わぬ事態に陥ります。
TM は、2値 ロジック を前提にしているので、null を排除しています。 |
<< もどる | HOME | すすむ >> | |
データ解析に関するFAQ |