Caché テクノロジガイド

第1章:
データ・モデリングーリレーショナルとオブジェクト・アクセス

システム開発の初期工程において、データ・モデルの基本的な方針を決める必要があります。大抵の場合、それは、リレーショナル・テーブルという従来型のデータ・モデルか、オブジェクトという新しいモデルのアプローチかの選択となります。複雑なデータを扱う場合、多くの開発者は、オブジェクト・モデルの方が効果的だと考えます。 レガシーアプリケーションをCaché に置き換える場合、通常最初のステップは既存データモデルを移行することです。様々なリレーショナル、オブジェクトデータモデルを簡単にインポートし、Caché の標準データ定義に置き換える方法も用意しています。Caché に移行すると、開発者のニーズに合わせ、データはオブジェクト、リレーショナルテーブル、多次元配列としてアクセスすることが可能です。

Caché は、それぞれが適している場面において、SQLとオブジェクト・データ・アクセスの両方を使用可能です。それぞれの使用形態と今日の開発者にオブジェクトのデータ・モデルが一般的に好まれる理由を理解するには、どのように、そしてなぜ各技術が開発されたのかを理解することが有用です。

Data Modeling

リレーショナル技術

コンピュータが出始めた頃、情報処理は大型のメインフレームシステムを利用して行われ、データ・アクセスは、そのほとんどが情報システム部の専門家に限られていました。したがって、データベースは手作りの傾向があり、効率的なデータの検索は、データベースの完全な知識が必要でした。ユーザがあるレポートが必要な場合、常にオーバーワークの中央のスタッフに作成を依頼をしなければならす、通常意思決定には間に合いませんでした。

リレーショナル技術は、もともと1970年代にメインフレームで開発され、1980年代のミニコンピュータが誕生するまでは、主に研究課題のままでした。パーソナル・コンピュータの出現により、SQLをベースにしたより使いやすいレポートライタによる“ユーザ中心の”時代へと突入しました――そのクエリ言語は、リレーショナル技術から生まれました。現在ユーザは、自分自身でレポートやデータベースに対してその場でクエリを生成できるため、リレーショナルの使用は急増しました。

SQLは、さまざまな種類のデータに対する質問に使われる首尾一貫した言語です。非常に単純で標準化されたフォーマット――行や列で構成された2次元フォーマット――の全データを参照することで動作します。このシンプルなデータ・モデルにより、質問のために使用する洗練されたクエリ言語の構成が可能ですが、その代償も大きくなってきています。生来的に、現実世界のデータ関係は複雑で、単純な行や列では収まらないという事実があり、よってデータは、複数のテーブルに分割して格納され、シンプルなタスクを完了するのに、結合操作をしなければなりません。これによって2つの問題が生じます。a)多くのテーブル結合が必要なため、クエリを書くのが難しくなっている(しばしば複雑な外部結合である)。b)リレーショナル・データベースが複雑な処理を行わなければならない場合、処理の負荷が非常に大きくなる。

SQLは、データベースの相互運用やレポート作成ツールとして標準となりましたが、SQLはリレーショナル・データベースから生まれたことを理解し、それに縛られる必要はないということを理解することは重要です。Cachéは、より強力な多次元データベース技術を使用して、クエリや更新言語として標準SQLをサポートし、さらにオブジェクト機能を組み込む拡張がなされています。

オブジェクト技術とオブジェクト・データベース

オブジェクト・プログラミングとオブジェクト・データベースは、複雑な脳の活動をシミュレートする主要な研究結果です。脳は、複雑で多様なデータを保存でき、一見すると関連のない情報でも同じ様に処理します。また、複雑な構造を内部に隠しながら、複雑な振る舞いを実装する必要があります。より人間の思考に近い自然なやり方で開発者が作業できる、という特性は、明らかに最先端のアプリケーション構築手法および技術であり、大きな利点となります。

オブジェクト・アクセスとリレーショナル・アクセス

オブジェクト技術では、複雑なデータをオブジェクト内に格納し、統一された簡単なインタフェースを使用してデータにアクセスできます。一方、リレーショナル技術も一貫したインタフェースを備えていますが、現実世界がもつ複雑なデータを扱えないため、ユーザやプログラマが、その複雑さを一貫して処理することを余儀なくされています。

オブジェクトは複雑なデータをモデル化できるため、オブジェクト・プログラミングは、複雑なアプリケーションのプログラムに最適な選択です。同様に、データベースのオブジェクト・アクセスは、トランザクション処理などのデータベースの挿入、更新処理に最適な選択です。

Cachéは、オブジェクト・アクセスをオブジェクト拡張SQLクエリ言語で補っています。SQLは、データの検索やレポート作成ツールとして、非常に強力な言語です。SQLは、トランザクション処理(この用途では扱いにくく、非効率)ではなく、クエリやレポート作成に最も適していると考えます。Caché SQLのオブジェクト拡張は、厄介なJOIN構文の大半をなくし、SQLをより使いやすくしています。

Caché オブジェクト・データ・モデルとオブジェクト・プログラミングの概要

Caché オブジェクト・モデルは、ODMG(Object Database Management Group)の規格に準拠しており、多重継承機能などの多くの拡張機能をサポートしています。

オブジェクト技術は、実際の人間の思考や情報の使用を反映しようとするものです。リレーショナル・データベースのテーブルとは異なり、オブジェクトはデータとコードを一括して扱います。例えば、Invoiceオブジェクトは、請求書番号や合計金額などのデータとPrint()などのプログラム・コードをもちます。

概念的には、オブジェクトは、オブジェクトのデータ値である“プロパティ”とコードの“メソッド”の全コピーを含むパッケージです。オブジェクトのメソッドはメッセージを送信し、他のメソッドとやり取りします。記憶領域を効率的に利用するため、同じクラスのオブジェクトは同じコードをコピーして共有するのが一般的です(例えば、各Invoiceオブジェクトが、自分専用にコピーしたコードを所有することは現実的ではありません)。またCachéでは、メソッドは、メッセージ送信の負荷に耐えるのではなく、効率的な関数呼び出しの結果を呼びます。しかし、これらの実装技術は、プログラマが意識することなく、オブジェクトのメッセージ送信に関しては常に正確です。

オブジェクトとクラスの違いは何でしょう。クラスは、プログラマが提供する定義構造とコードです。全コード同様、データの本質やデータの格納方法の記述を含みますが、実際のデータはありません。オブジェクトは、クラスの特定の“インスタンス”です。例えば、請求書番号123456は、Invoiceクラスのオブジェクトです。

オブジェクト技術は、コンピュータが認識できる単純なデータ型に制限されることなく、自然な形で現実のデータ表示を可能とします。オブジェクトは、他のオブジェクトを組み入れたり参照することができます。これにより、便利で重要なデータ・モデルの作成が簡単になります。以下は、Customerオブジェクトの単純な例です。

[Customer object diagram artwork]

Name: データは、Nameデータ型を使用して格納。

SSN: データは、整数のような単純なデータ型、またはプログラマが定義する複雑なデータ型(NNN-NN-NNNN などの9 桁の文字列)。

Address: オブジェクトを他のオブジェクトに埋め込む方法を示します。
Address は、StreetプロパティとCityプロパティを持つ埋め込みオブジェクト。

AccountRep: AccountRepは、多対一(複数のCustomersと1つのSalesPerson)でCustomer をSalesPerson オブジェクトに関係づけるプロパティです。埋め込みオブジェクトと異なり、関連するオブジェクトは独自のデータベースIDを持ち、別々に格納されます。IDを使用すると、Customerにアクセスせず、直接SalesPersonにアクセスできます。埋め込みオブジェクトと関連オブジェクトにアクセスする構文は同じです。(例えば、Customer.Address.CityとCustomer.AccountRep.Nameは同じ“ドット”構文を使用)。

Invoices: Customerには、Invoicesのコレクション(集合)があり、それぞれが独自のデータベースIDで別々に保存されている複雑なオブジェクトです。
この例では、親子リレーションシップを使用し、CustomersとInvoices間に一対多(1つのCustomerと複数のInvoices)のリレーションシップをもっています(CustomerをもたないInvoiceは存在しませんが、InvoiceなしでもCustomerは存在します)。埋め込みオブジェクトのコレクションも可能。

オブジェクトの基本概念

継承は、あるオブジェクト・クラスから新しいクラスを派生させる機能です。新しいクラス(サブクラス)は、スーパークラスのプロパティとメソッドを全て継承します。また独自に付加的なプロパティやメソッドをもちます。サブクラスのオブジェクトは、スーパークラスの関係をそのままもつと考えられます。例えば、犬は哺乳類(mammal)であるため、DogクラスはMa㎜alクラスの全てのプロパティとメソッドを継承し、かつ、DogTagNumberのような付加プロパティやメソッドをもちます。サブクラスは、継承した定義を書き換えることが可能です(例えば、InvoiceクラスのサブクラスのPrint()メソッドは、InvoiceクラスのPrint()メソッドと内容が異なる)。継承は、コードの再利用を促進し、主な改善箇所を反映しやすくします。

多重継承とは、サブクラスが1つ以上のスーパークラスを引き継ぐことです。例えば、犬は哺乳類であり、ペットでもあります。したがって、Dogのオブジェクト・クラスは、Ma㎜alクラスとPetクラスの両方の属性を継承可能です。

カプセル化は、オブジェクトを“ブラック・ボックス”のようなものとして表示することを意味します。パブリック・プロパティやメソッドは、他のメソッドから利用できますが、一方、プライベート・プロパティやメソッドは、同じクラスのメソッドでしかアクセスできません。したがって、アプリケーションは、オブジェクトの内部機能を認識する必要はなく、パブリック・プロパティとメソッドのみ扱います。カプセル化の機能により、プログラマはアプリケーションの他の部分に影響を与えることなく、クラスの内部機能を改善できます。

ポリモフィズムは、基本となるメソッドの実装が異なる場合も、複数のクラスで使用するメソッドが同じインタフェースを共有することを示します。例えば、クラスLetter、Mailing Label、ID BadgeがPrintというメソッドをもつと仮定します。印刷する場合、アプリケーションは、アクセスするオブジェクト・タイプを認識する必要はなく、オブジェクトのPrintメソッドを呼び出すだけです。

Caché の利点

Caché は、完全なオブジェクト指向データベースであるため、高性能なトランザクション処理アプリケーションの開発者は、強力なオブジェクト技術の全てを利用できます。

直感的なデータ・モデリング
オブジェクト技術により、開発者は、非常に複雑な情報を単純で現実的な方法で処理することができます。その結果、アプリケーション開発プロセスが速くなります。

迅速アプリケーション開発
カプセル化、継承、ポリモフィズムのオブジェクト概念により、クラスを再利用、再設定し、アプリケーション間で共有できます。したがって、開発者は多くのプロジェクトで、それらの成果を効率的に利用できます。


データ・モデルとしてオブジェクトを選択する理由

新規にデータベース・アプリケーションを開発する場合、大半はオブジェクト技術を選択します。これは、複雑なアプリケーションを迅速に開発でき、 修正も容易にできるためです。オブジェクト技術は、以下のような多くの利点があります。

  • オブジェクトは、現実世界のデータをより自然に表現する高度なデータ構造をサポート
  • プログラミングがより単純で、実行している処理や操作を簡単に追跡可能
  • カスタマイズされたクラスのバージョンを、標準のものに簡単に置き換えることができ、アプリケーションを簡単にカスタマイズ可能
  • ブラック・ボックスといわれるカプセル化技法は、他のアプリケーションに影響を与えることなくオブジェクトの内部処理の改良・変更が可能
  • オブジェクトは、異なるアプリケーションや技術に容易に接続できる方法を提供
  • オブジェクト技術は、JavaやGUI(グラフィック・ユーザ・インタフェース)と生来的に適合
  • 新しいツールの多くが、オブジェクト技術を採用
  • オブジェクト技術は、ユーザ・インタフェースとアプリケーションの他の部分との独立性を確保。したがって、必要に応じて新規のユーザ・インタフェース(将来的に開発される技術なども含め)を採用する場合も、ほとんどコードを変更することなく再利用可能

オブジェクト・データ・ストレージについて

多くのアプリケーションが、オブジェクト・プログラミング言語で記述されているにもかかわらず、残念なことに、オブジェクト・モデルのデータをリレーショナル・データベースの2次元構造テーブルに押し込んでいる場合がよくあります。これは、オブジェクト技術の長所を台無しにしています。

Caché は、表現力豊かなオブジェクト・データを適切に格納する多次元データ構造を備えています。これより、高速なデータ・アクセスや迅速なプログラミングが可能です。

さらに、リレーショナル・アクセスは――

もちろん、多くのツール(例えばレポート・ライターなど)は、データにアクセスするために、オブジェクト技術ではないSQLを使用しています。

Cachéの特徴として、データベース・オブジェクトのクラスを定義すると、そのデータに自動的に完全なSQLアクセスが提供されます。したがって、特別な設定をせずに、Caché のデータで即座にSQLベースのツールが使用できます。さらに、Caché多次元データベース・サーバが高性能であるという利点も体験できます。

また、その逆も可能です。リレーショナル・データベースのDDL定義をインポートすると、Caché は自動的にデータのオブジェクト記述を生成し、SQLからのアクセスも同様に、オブジェクトとしてすぐにアクセスが可能です。

Caché 統一データアーキテクチャは、データ・アクセス・パスを同期化します。編集用のデータ記述は1つです。

 



Previous Page

前ページ
はじめに

第1章:
データ・モデリングーリレーショナルとオブジェクト・アクセス

次ページ
第2章

Next Page