オブジェクト指向・データベース

  Caché は、完全な「オブジェクト指向 データベース」であるといえます。
  オブジェクト指向 データベースの仕様は、ODMG(Object Orineted Management Group) によって標準化が進められています。 オブジェクト指向 データベースの仕様自体については、各種の書籍で詳細に内容確認をすることができますので、 当ホームページでは、詳細に関する解説を割愛しています。
  
  オブジェクト指向 データベースは、OODB(Object Oriented Data Base) のことですが、往々にして、ODB(Object Data Base) と混同される場合があるようです。 1つの「O」(Oriented)が大きな意味を持っているようです。
  ODB と表現した場合には、CAD データや画像・動画といった「オブジェクト」を管理するためのデータベースと捉えられるようです。 そこで、オブジェクトに対するバージョン管理機能が装備されていたり、「トランザクション」の単位も日単位であったり、それ以上に長い単位であったりするようです。
  
  Caché の装備しているオブジェクト指向 データベース モデルは、上記のODB のような機能を実現したものではなく、オブジェクト指向 プログラミング言語に装備されているような 「オブジェクト指向」を実現したデータベース モデルです。 オブジェクト指向 プログラミング言語では、クラスやメソッドといった概念に基づいて、プログラム設計が行われます。 またオブジェクト指向設計に基づいたクラスの継承(inheritance)や多態(polymorphism)機能が実装されます。
  しかし、オブジェクト指向 プログラミング言語に欠けているのもがあります。それは、オブジェクトの永続化です。 つまり、オブジェクト指向 プログラミング言語中で取得したデータをデータベースに格納(読み/書き)する機能です。 実際には多くの場合、SQLコマンドを利用してデータベース(RDB)に格納する方法を採用しているようです。
  このようにSQLコマンドを利用することが最適な方法であるかを検証してみる必要があります。
  
  ところで、「インピーダンス・ミスマッチ」という言葉をご存知でしょうか?
  「インピーダンス・ミスマッチ」とは次のように解説されています。(出典:新世代工学シリーズ データベース ISBN4-274-13194-7 P.89
  たとえば大学における学生情報を扱う応用では、実世界の学生は「実体」としてモデル化されるのに対して、そのデータを実際に記録するRDBでは「関係表」に変換されて扱われ、 そのデータを利用するプログラムでは、配列や構造体などプログラミング言語特有のデータ構造にさらに変換して扱わなければならない。 このデータモデル間の変換過程は、プログラマが陽にプログラムコードの一部として記述せねばならず、プログラマの負担を増大させ生産性を著しく損なう障害であるとされており これをインピーダンス・ミスマッチ(impedance mismatch)と呼んでいる。
  
  上記の内容をごく簡単に言えば、「プログラミング言語がオブジェクト指向なのに、データベースがRDB では矛盾があるのではないか? 」 つまり「プログラミング言語がオブジェクト指向であるならデータベースもオブジェクト指向であるべきだ」と言うことになります。
  
  このようなことは多くの書籍や研究者によって多数指摘されていますが、残念なことに現状では解決されていない問題点です。 例えば、Java でプログラミングしていてもデータベースの操作をする場合にはSQL を利用する、といったことが通常行われています。
  なぜ、このようにインピーダンス・ミスマッチが解消されていないでしょうか?
  答えは、インピーダンス・ミスマッチを解消できる「オブジェクト指向 データベース」が存在していないから、です。 あるいは、オブジェクト指向 データベースが存在しても、データベースの操作を行う言語が限定されていたり、技術習得が難しいものであったりするようです。
  
  では、Caché の場合はどうでしょうか?
  Caché は非常に純粋な「オブジェクト指向 データベース」であるとともに、既存の多くのプログラミング言語(例えば、VisualBasic,Delphi, C++,Java)との接続が可能となっています。 また、オブジェクト指向 データベースを操作するための言語も簡便に利用することができるように工夫されています。
  さらに、オブジェクト指向 データベースを定義してコンパイルした時点で、オブジェクト指向 データベースとしてもリレーショナル データベースとしても利用できるようになります。 リレーショナル データベースとして利用する場合には、SQL92 規格のSQL コマンドが利用できます。 また、当然ですが、オブジェクト指向 データベースとして利用した場合もリレーショナル データベースとして利用した場合も、同一のデータに対する処理が行われます。
  
  Caché では、こういったある意味で「当然そうあるべき仕組み」が装備されています。
  RDB をオブジェクト指向 データベースとして利用するために、テーブル定義内容に対してさらにクラス定義を行う、と言う方法は、果たして利用者に利便性を与えているのでしょうか? Caché を使った経験からすれば、それは単に「負担を強いている」としか思えません。

戻る