ORDA とはオブジェクト・リレーショナル・データアクセス(Object Relational Data Access) の意味です。これはランゲージによって、あるいはユーザーインターフェースウィジェットを通して、データベースをオブジェクトとして使用できるようにする革新的なテクノロジーです。
この概念にはリレーションがレジーローディングと合わせてすでに暗示的に織り込まれており、デベロッパーはありがちなデータセレクションや転送の煩わしさから解放されます。
ORDA では、データストアと呼ばれる抽象化レイヤーを通してデータにアクセスします。データストアは4Dフォームオブジェクトを通してデータベースモデルあるいはデータにインターフェースを提供するオブジェクトです。テーブルはデータクラスオブジェクトにマップされ、フィールドとリレーションはデータクラスの属性で、レコードはエンティティです。詳細な情報については、用語集 のページを参照してください。
情報をテーブル、フィールド、レコードとして表示する代わりに、ORDA では現実世界の概念により正確にデータをマップする、別のアプローチを使用します。
効率に影響することなく、リレーショナルストラクチャーを非正規化する能力を想像してみてください。リレーショナルなストラクチャーを完全に理解する必要がないまま、データの使用が単純かつ分かりやすくなるようにあなたのアプリケーション内のビジネスオブジェクトの全てについて説明することを想像してみてください。
データストアでは、単一のデータクラスだけで旧来のリレーショナルデータベーステーブルを構成していた要素の全てを取り込むことができるうえに、リレートされた親エンティティからの値や、リレートされたエンティティとエンティティセレクションへの直接参照も含めることができます。
クエリをするとエンティティセレクションと呼ばれるエンティティの一覧を返し、これはSQLのクエリの行セットの役割を果たします。違いは、各エンティティは自身がどこに所属するかを"知っている"うえ、他の全てのエンティティとのリレーションを"理解している"ということです。これはつまりデベロッパーはクエリ内において様々な情報の断片をどのようにリレートさせたらいいか、あるいはリレーショナルストラクチャーにに変更された値を書き込んで戻す際にどのようにそれを更新したらいいかを説明する必要がないということです。
これに加えて、エンティティセレクションあるいはエンティティなどのORDA オブジェクトは、リストボックスや変数などのフォームオブジェクトに簡単に割り当てることができます。This や Form コマンドといった強力な機能と組み合わせることで、オブジェクトやコレクションに基づいた、モダンでモジュラーなインターフェースをビルドすることができるようになります。
原則として、ORDA はオブジェクト型を扱います。ORDA では、データストア自身を含めて全ての主要な概念は、オブジェクト型を通して利用可能です。ORDA オブジェクトは4D メソッドによって、必要なときに作成され、インスタンス化されます(あなたが作成する必要はありません)。
ただし、(C_OBJECT コマンドで宣言された)他のオブジェクト型同様、一般的にはそれらを4D オブジェクト変数に保存する必要がある点に注意してください。ORDA のオブジェクトは4D の標準のオブジェクトと同じように扱えます(オブジェクト(ランゲージ)参照)が、特定のプロパティおよびメソッドの利点を自動的に享受することができます。
ORDA で利用可能なオブジェクト型は以下の通りです:
- データストア: データストアは、データベースへのインターフェースオブジェクトです。データベース全体を反映したものをオブジェクトとしてビルドします。メイン (デフォルト) のデータストアは ds コマンドを通して利用可能です。リモートデータストアを参照するには Open datastore コマンドを使います。
- データクラス: データクラスとは、テーブルに相当するものです。オブジェクトモデルとして使用され、リレーショナル属性(データクラス間のリレーションに基づいてビルドされた属性)を含めて全てのフィールドを属性として参照します。リレーショナル属性はクエリにおいて属性のように使用することができます。
- 属性: データクラスプロパティは下地にあるフィールドやリレーションを説明する属性オブジェクトです。
- エンティティセレクション: エンティティセレクションはデータクラスから一つ以上のエンティティを参照します。通常、クエリの結果作成されます。
- エンティティ: エンティティとは、レコードに相当するものです。実際にはデータベース内のレコードを参照するオブジェクトです。
4D データベース内でORDA を使用できるようにするためには、以下の要件とスペックが遵守されているのを確認する必要があります:
注: ORDA ではテーブルあるいはフィールドの"非表示"オプションは考慮されません。SET TABLE TITLES あるいは SET FIELD TITLES を通して定義されたバーチャルストラクチャーも同様です。