2004年 8月 1日 作成 | 「基準編第12章 (セット・アット・ア・タイム法)」 を読む | >> 目次に もどる |
2007年 5月 1日 更新 |
第 12章 「リレーショナル・データベース の基本構造」 は、当初 (書物の体系を考えていたとき)、執筆するつもりはなかった。というのは、そこに綴られていることは、小生が、かって出版した他の書物のなかで、綴ってきたことであるから。 第 12章を執筆した理由は、第 11章までが--いな、この書物全体が--、「T字形ER手法」 を理論的に検討することを目的としていたので、逆に、T字形 ER手法は実践的な技術ではない、と邪推されることを恐れたからである。コッド 関係 モデル の強み・弱みを知り尽くして、かつ、(プロダクト としての) RDB の特徴を知り尽くして、T字形 ER手法を作ったことを感じてほしかったので、(極めて簡単な記述になっているけれど、) RDB の特徴をまとめておいた。 小生の専門領域は、当初、DBA であった。小生が 30歳の頃--いまから、20数年ほど過去のことであり、当時、アシスト 社に勤めていたが--、RDB は、いまだ、日本では使われておらず、RDB を、日本のなかに導入・普及することが、小生の仕事であった。当時のいきさつを、本稿のなかで、詳細に述べるつもりはないので、「起業家 ビル・トッテン の IT ビジネス 奮闘記」 (コンピュータ・エージ 社)を読んでいただければ幸いである。
小生は、まず、プロダクト としての RDB を習い覚え、次に、コッド 関係 モデル を研修した。つまり、RDB の技術を最初に覚えて、そのあとで、理論 (コッド 関係 モデル) を習得した。 DATACOM/DB は、当時、すでに、「traversal-table」 を回避するために、手続き型言語の COBOL が、(inverted 型の インデックス を使って、) テーブル に対して、(レコード 単位ではなくて、) 「エレメント (element)」 単位に アクセス することを実現していた。しかも、LOCATE コマンド を搭載して、「INDEX-only」 を実現していた。RDB の理論--コッド 関係 モデル--の観点から判断すれば、DATACOM/DB が提示した アクセス 法 は 「邪道」 になる。だから、当時、DATACOM/DB は、世間では、リレーショナル・データベース と云われないで、「リレーショナル 型」 データベース と云われていた(笑)。
さて、ここまで綴れば、小生の技術が、DATACOM/DB を起点にしていることを、すでに気づいた人たちもいるでしょう(笑)。すなわち、「traversal-table」 を回避するために、レコード・アット・ア・タイム を セット・アット・ア・タイム のように使う 「INDEX-only」 の着想は、DATACOM/DB の技術 (technique と mechanism) を起点にしています。 セット・アット・ア・タイム のからくりを教えてくれたのが DATACOM/DB でした。「create view」 や 「order-by」 を使えば、「traversal-table」 が生成されるからくりを教えてくれたのが、DATACOM/DB でした--基幹系 システム 向きの RDB として、「traversal-table」 を回避するために、DATACOM/DB は、「create view」 も 「order-by」 も搭載しないで、(しかし、「view」 を扱えるように、) 「エレメント」 単位の レコード・アット・ア・タイム を搭載していた。しかも、「inverted 型の」 インデックス と、LOCATE コマンド を使った 「gereric search」 を併用すれば、インデックス を使って複数 テーブル を join して、データ を読まないで、データ の値を読み込むことができる。
「論理 ビュー (logical view)」 と 「(「traversal-table」 を回避した) 高 パフォーマンス」 という二律背反を、同時に実現するために、小生が、当時から、狙っていたのが、「レコード・アット・ア・タイム を セット・アット・ア・タイム のように使う 『INDEX-only』」 だった。
DBA をやって、それから、DA になった。 コッド 正規形は、実地に使う単純な技術として、いくつかの簡単な正規化手順を覚えれば済むことだが、DATACOM/DB の DBA をやっていた小生には、物足らなかった--いま思えば、関係 モデル を、簡単な正規形構成としてまとめた コッド 氏の天才を驚嘆しているが。 小生は凝り性の性質なので、正規化手順を覚えるのみでは物足らないので、いよいよ、コッド 関係 モデル の原文を読むことにした。しかし、数学基礎論の素養のない小生が、コッド 論文を読んでも、皆目、理解できなかった。「原理」 を知るためには、数学基礎論を習得していなければならないことを痛感した小生は、数学基礎論を独習した。 しかし、数学基礎論を学習するために、指導してくれる人がいなかったので、学習途上、遠回りをしてしまった。数学を、とにかく、学習すればよい、と思い、岩波書店出版の数学基礎講座 シリーズ を購入して、数学全般の基礎知識を習得しなければならないと思い込んで、第一冊目から、順次、読み始めて、第一冊目の途中で挫折した。「集合と論理」 に的をしぼれば良い、と気づいたのは、いっぽうで、ウィトゲンシュタイン の書物 (「論理哲学論考」) を読んでいたことが幸いした。 「集合と論理」 に的をしぼってからは、学習が捗った。集合論を学習していて、コッド 関係 モデル を理解するためには、ZF の公理系 (セット 概念) を理解すればよいことがわかった。すなわち、ZF の公理系のなかで、「集合」 概念として、直積集合と 「対 (unordered pair)の公理」 と 「空集合の公理」 を確認して、「論理」 として、第一階述語論理 (変項の領域が個体にかぎられている) の体系であることを理解すれば、コッド 関係 モデル を読むことができる。 上述した検討をふまえて、「セット・アット・ア・タイム法」 として、以下の点を、まとめた。 (1) 理論的には、関係 モデル を理解するために、ZF の公理系を学習して直積集合を理解すればよい。 (2) 技術的には、セット・アット・ア・タイム 法は、直積集合を前提にしている。
(3) プロダクト として、セット・アット・ア・タイム 法を実現するには、以下の点に対応しなければならない。
- 複合選択 (AND/OR) に対応するために、「同一 row 上の検証」 をしなければならない。
|
[ 補遺 ] (2007年 5月 1日)
本 エッセー では、「舞台ウラ」 まで述べているので、このほかに説明の仔細はいらないでしょう。初版では、「直積集合」 (205 ページ) を説明するために、(コッド 関係 モデル が使った やりかた ではなくて、「直積集合」 そのもの-の考えかたを理解してもらいたかったので、) それぞれの セット として 「主体集合」 (従業員とか部門とか) を例にしましたが、以後の版では、(コッド 関係 モデル を考慮して、) セット を 「属性値集合」 に修正しました。 コッド 関係 モデル は、論理的意味論として、「null」 を認めています。「null」 は、意味論上、多義 (unknown と undefined) になるので、「値」 を演算するなら、4値論理を使わなければならない。コッド 関係 モデル は、4値論理を前提にしています。また、関係 モデル では、メンバー の 「並び」 が実現されていなければならないのですが、「整列集合を構成することができない」 ことを コッド 氏は認めています。私は、コッド 関係 モデル を実地に適用する際、これらの問題点 (「null」 と 「並び」) を除去することを考えました。すなわち、「null」 を認めないで、2値論理のなかで データ 構造を構成して、「関係」 では、対称性と非対称性を扱うことを考えました。それらを考慮して、コッド 関係 モデル を 「意味論的に拡張した」 モデル が TM (T字形 ER手法) です--ただし、関係の対称性・非対称性は、(コッド 関係モデル では、属性値を対象にしているのですが、) TM では、階を 1つ上にして、個体 (entity) のあいだで考慮している点に注意して下さい。 そして、セット・アット・ア・タイム 法の 「弱点」 (「traversal-table の生成」) を回避するために、プロダクト としての RDB が、バージョンアップ のなかで (コッド 関係 モデル とは無関係な) indexing を搭載してきたので、indexing を view のように使う 「INDEX-only」 を考えた次第です。言い換えれば、レコード・アット・ア・タイム 法を セット・アット・ア・タイム 法のように使う やりかた を導入しました。この やりかた は、一見、tricky (邪道) のようにみえますが、関係 モデル の弱点 (traversal-table) を回避して、かつ、長所 (logical view) を活かすために、理論としての コッド 関係 モデル と プロダクト としての RDB を調整して、セット・アット・ア・タイム 法を実現した至極当然な やりかた です。レコード・アット・ア・タイム 法を セット・アット・ア・タイム 法のように使えば、traversal-table を生成しないし、order-by もいらない。 |
<< もどる | HOME | すすむ >> | |
▼ 「論理データベース論考」を読む |