データクラスはデータベーステーブルへのオブジェクトインターフェースを提供します。4D アプリケーション内の全てのデータクラスは、ds データストアのプロパティとして利用可能です。例えば、4D ストラクチャー内の以下のテーブルについて考えます。

[Company] テーブルはds データストア内のデータクラスとして自動的に利用可能です。以下のように書くことができます:
C_OBJECT(compClass)
compClass:=ds.Company
このコードはcompClass にCompany データクラスへの参照を割り当てます。
データクラスオブジェクトは以下のものを格納することができます:
データクラスは実際のデータベースの概略を提供し、概念的なデータモデルの管理を可能にします。データクラスはデータストアをクエリする唯一の方法です。クエリは単一のデータクラスを通して実行されます。クエリはデータクラスの属性およびリレーション属性名に基づいてビルドされます。リレーション属性は、クエリ内で複数のリンクされたテーブルを用いる手法です。
データクラス属性は、それぞれのクラスのプロパティとして利用可能です。例:
nameAttribute:=ds.Company.name
revenuesAttribute:=ds.Company["revenues"]
このコードは、nameAttribute および revenuesAttribute に、Company クラスのそれぞれname および revenues 属性の参照を代入します。このシンタックスは属性内に保管されている値を返すのではありません。その代わりに、属性自身への参照を返します。値を管理するためには、エンティティ を使用する必要があります。
注: データクラス属性はプロパティを持ったオブジェクトであり、詳細な説明はORDA - データクラス属性 の章にあります。
データクラス属性にはいくつかの種類があります。ストレージ、リレートエンティティ、リレートエンティティズです。スカラーである属性(単一の値のみを提供するもの)は標準の4D データ型(倍長整数、テキスト、オブジェクトなど)をサポートします。
- ストレージ属性は4D データベース内のフィールドに相当するもので、インデックスをつけることができます。ストレージ属性に割り当てられた値は、保存時にエンティティの一部として保存されます。ストレージ属性にアクセスしたとき、その値はデータストアから直接取り出されます。ストレージ属性はエンティティを構成するもっとも基礎的なブロックであり、名前とデータ型で定義されます。
- リレーション属性は他のエンティティへのアクセスを提供します。リレーション属性は単一のエンティティ(あるいはエンティティなし)あるいはエンティティセレクション(0からNまでのエンティティ)のどちらかになります。リレーション属性はリレーショナルストラクチャーの"クラシックな"リレーションに基づいてビルドされており、リレートエンティティあるいはリレートエンティティズへの直接的なアクセスを提供します。リレーション属性は、ORDA においては名前を使用することで直接的に利用可能です。
例えば、以下の部分的なデータベースストラクチャーと、そのリレーションプロパティについて考えます:

全てのストレージ属性は自動的に利用可能です:
- Project データクラス内:"ID", "name", および "companyID"
- Comapny データクラス内:"ID", "name", および "discount"
これに加えて、以下のリレーション属性もまた自動的に利用可能になります:
- Project データクラス内:”リレートエンティティ”型のtheClient 属性。各Project (クライアント)に対して最大1つのCompanyがあります。
- Company データクラス内:"リレートエンティティズ"型のcompanyProjects 属性。各Company に対して不定数のProjectがあります。
注: データベースリレーションの手動あるいは自動プロパティは、ORDA においては何の効力も持ちません。
全てのデータクラス属性 はデータクラスのプロパティとして公開されています:

これらのオブジェクトは属性をあらわしますが、データへのアクセスは与えないという点に注意してください。データの読み書きはentity オブジェクトを通して行なわれます。エンティティ内でどのようにリレートされた属性を使用するかについての情報については、エンティティ属性を使用する を参照してください。
一部のORDA メソッドでは属性名として文字列参照を受け取ることができ、また属性参照を受け取ることもできます。例えば、以下の場合を考えます:
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection("lastname")
このコードではエンティティセレクション内の郵便番号95113の人を定義しています。それから下の名前のコレクションを作成します。属性が文字列値である場所において、以下のように属性参照を使用することもできます:
lastNameAtt:=ds.Employee.lastname
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection(lastNameAtt)
データクラスオブジェクト自身は、オブジェクトとしてコピーすることはできません:
$mydataclass:=OB Copy(ds.Employee)
ただしデータクラスプロパティは取得可能です:
ARRAY TEXT($prop;0)
OB GET PROPERTY NAMES(ds.Employee;$prop)