2004年 9月16日 作成 データベース・パラダイム と プログラミング・パラダイム >> 目次 (テーマ ごと)
2008年10月16日 補遺  


 
 プログラミング 言語として、以下がある。

 (1) 手続き型 プログラミング (Fortran、COBOL、Pascalなど)
 (2) 関数型 プログラミング (Lisp)
 (3) 論理型 プログラミング (Prolog)
 (4) オブジェクト 指向 プログラミング (SmallTalk)

 C および Java を (4) にいれるかどうか、という点は論点になるかもしれない。

 
 次に、プログラミング・パラダイム として、以下がある。

 (1) 構造的プログラミング
 (2) 抽象データ型

 
 構造的 プログラミング では、ソリューション を第一義に考えて、ソリューション を手続き的に変換して、変数のなかに値を代入し、1 つずつの ステップ を実行して、「場合分け」 を網羅して、「『判断分岐 (IF)』 と 『繰返し (loop 制御)』」 を操作の基本とする。「データ の型 (構造化)」 は、問題に即応した型が定義される。
 関数と論理は、この操作の特殊形とする。

 いっぽう、抽象 データ 型では、データ に固有な操作も同時に扱う。カプセル 化機能を使う。

 
 データベース・パラダイム として、以下がある。

 (1) 概念設計 (意味 データモデル
 (2) 関係 データベース (セット・アット・ア・タイム 法
 (3) ネットワーク・データベース (レコード・アット・ア・タイム 法

 
 さて、プログラミング・パラダイム と データベース・パラダイム との関係を調整することは、むずかしい。
 RDB が多く導入されているが、SQL を 「I/O 言語」 として考えるのか、それとも、(SQL の シンタックス が、バージョンアップ のなかで 「拡張」 されて、「IF」 などの構造的 プログラミング 向きの構文が導入されたので、) 構造的 プログラミング にも対応する言語として考えるのか、という点は論点になる。あるいは、SQL は、ストアード・プロシジャー を使えば、「情報隠蔽」 型の カプセル 化として考えることもできる。

 RDB、構造的 プログラミング および抽象 データ 型は、それぞれ、設計思想がちがうので、それらを、それぞれの設計思想を最大限に活かしながら接続することは、なかなか、むずかしい。
 RDB を使って ウェッブ の システム を作る際、RDBOOP の接続が論点になる。そして、その論点の中心になるのが、SQL である。



[ 補遺 ] (2008年10月16日)

 本 エッセー では、データベース・パラダイム と プログラミング・パラダイム を それぞれ まとめていますが、どうして、本 エッセー を綴ったのかしら、、、(本 エッセー を綴った理由が私には思い出せない、、、)。たぶん、SQL の 「拡張」 に対して異議を申し立てるために綴ったのかもしれない。SQL が、バージョンアップ として、「IF」 とか 「indexing」 とか 「配列」 を導入したことに対して私は疑問を抱いています。というのは、それらの機能は、コッド 関係 モデル の 「関係代数 (Relational algebra)」 に対して──あるいは、単純に言って、セット・アット・ア・タイム 法に対して──矛盾するから。

 もっとも、コッド 関係 モデル と プロダクト としての RDB は、たとえ、RDB が、当初、コッド 関係 モデル を基底にして作られたとしても、それぞれ、べつの存在であると RDB ベンダー が言い張るのであれば、「そうであれば、それでもいいでしょう」 としか私には応えられないけれど。ただ、SQL は、できるかぎり、集合論演算と リレーショナル 代数演算 (join, select, projection) を前提にして使うのが──言い換えれば、「IF」 や 「indexing」 や 「配列」 など使わないほうが──プログラム は コンパクト になります (高生産性・高保守性を実現します)。

 SQL と オブジェクト 指向言語を接続するのが難しいいっぽうで、さらに やっかいな現象は、それらの言語の特性を無視して、それらの言語を使って 「構造的 プログラミング」 をやっていることが多いという実態です。本 エッセー で述べているように、SQL も オブジェクト 指向言語も、「構造的 プログラミング」 とは正反対の前提に立っています──SQL も オブジェクト 指向言語も、「事実」 として記述された データ を前提にしていて、「ソリューション」 を第一義に構成することを前提にしていないのですが、現実の プログラミング では、SQL や オブジェクト 指向言語を使って 「構造的 プログラミング」 をやっているのは、どうしてかしら、、、。





  << もどる ベーシックス すすむ >>
  データベースの基礎知識