データモデルオブジェクト
ORDA は、下地であるデータベースストラクチャーへの自動マッピングに基づいた技術です。 ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。
ストラクチャーマッピング
When you call a datastore using the ds
or the Open datastore
command, 4D automatically references tables and fields of the corresponding 4D structure as properties of the returned datastore object:
- テーブルはデータクラスへとマップされます。
- フィールドはストレージ属性へとマップされます。
- リレーションはリレーション属性へとマップされます。ストラクチャーエディター内で定義されたリレーション名はリレーション属性名として使用されます。
変換のルール
変換の際には以下のルールが適用されます:
- テーブル、フィールド、そしてリレーション名はオブジェクトプロパティ名へとマップされます。 それらの名前が標準のオブジェクト命名規則に則っているようにしてください (識別子の命名規則 参照)。
- データストアは単一のプライマリーキーを持つテーブルのみを参照します。 以下のテーブルは参照されません:
- プライマリーキーがないテーブル
- 複合プライマリーキーを持つテーブル
- BLOBフィールドは、BLOB オブジェクト 型の属性として利用可能です。
ORDA のデータストアマッピングでは、次のものは考慮されません:
- テーブルあるいはフィールドの "非表示" オプション
SET TABLE TITLES
あるいはSET FIELD TITLES
を通して定義されたバーチャルストラクチャー- リレーションの "手動" あるいは "自動" プロパティ
リモートデータストアの利用
Open datastore
コマンドまたは REST リクエスト によってリモートデータストアにアクセスする場合、RESTリソースとして公開 プロパティが設定されているテーブルとフィールドのみ利用可能です。
このプロパティは、データストアにデータクラスおよび属性として公開したい各テーブルおよびフィールドについて 4D ストラクチャーのレベルで設定する必要があります:
データモデルのアップデート
データベースストラクチャーレベルで変更がおこなわれると、カレントの ORDA モデルレイヤーは無効化されます。 これらの変更には、以下のものが含まれます:
- テーブル、フィールド、リレーションの追加または削除
- テーブル、フィールド、リレーションの名称変更
- フィールドの核となるプロパティ (型、重複不可、インデックス、自動インクリメント、null値サポートなど) の変更
カレントの ORDA モデルレイヤーが無効化されると、その後 4D または 4D Server のローカルの ds
データストアを呼び出した時にモデルレイヤーが自動的に再読み込 みされ、更新されます。 ただし、エンティティやエンティティセレクションなど、ORDA オブジェクトへの既存の参照は、再生成されるまではそれらが作成されたときのモデルを使用し続けるという点に注意してください。
また、アップデートされた ORDA モデルレイヤーは、以下のコンテキストにおいては自動的には利用可能にはなりません:
- 4D Server に接続したリモートの 4D -- リモートのアプリケーションはサーバーに再接続する必要があります
Open datastore
または REST 呼び出し を使用して開かれたリモートデータストア -- 新しいセッションを開く必要があります
オブジェクトの定義
データストア
データストアは、データベースへのインターフェースオブジェクトです。 データベース全体を反映したものをオブジェクトとしてビルドします。 データストアは モデル と データ から構成されています:
- モデルにはデータストアを構成するすべてのデータクラスが格納され、その詳細な情報も含まれます。 これはその下地にあるデータベース自体からは独立した存在です。
- データとは、そのモデル内で使用・保存される情報を指します。 たとえば、従業員の名前、住所、生年月日などはデータストア内で扱うことができるデータに含まれます。
コード内で扱うにあたっては、データストアはオブジェクトであり、公開されているすべての データクラス をプロパティとして持ちます。
4D では次のデータストアを扱うことができます:
- カレント 4D データベースに基づいた、ローカルデータストア。これは、
ds
コマンドで返されるメインデータストアです。 - リモートデータベースによって REST リソースとして公開された、一つ以上のリモートデータストア。これらは、
Open datastore
コマンドで返されます。
データストアは単一の、ローカルあるいはリモートのデータベースを参照します。
データストアオブジェクト自身は、オブジェクトとしてコピーすることはできません:
$mydatastore:=OB Copy(ds) // null を返します
しかしながらデータストアプロパティは取得可能です:
ARRAY TEXT($prop;0)
OB GET PROPERTY NAMES(ds;$prop)
// $prop にはすべてのデータクラスの名前が格納されます
メイン (デフォルト) のデータストアは ds
コマンドを通して常に利用可能です。Open datastore
コマンドを使えば、あらゆるリモートデータストアを参照することができます。