モデルデータ - Node.js SDK
オブジェクトタイプとスキーマ
すべての Realm オブジェクトは特定のオブジェクトタイプに準拠します。これは基本的に、事前定義されたスキーマを使用してそのタイプのオブジェクトのプロパティと関係を定義するクラスです。 Realm は、Realm 内のすべてのオブジェクトがオブジェクトタイプのスキーマに準拠していることを保証し、オブジェクトが作成、変更、または削除されるたびにオブジェクトを検証します。
Realmオブジェクトは基本的に一般的なJavaScriptオブジェクトと似ていますが、スキーマ検証や ライブ クエリ などの追加機能もいくつか備えています。 Node.js SDKメモリはRealmオブジェクトをネイティブJavaScriptオブジェクトに直接マッピングするため、 ORM などの特別なデータアクセスライブラリを使用する必要はありません。 。代わりに、 Realmオブジェクトを他のオブジェクトと同様に操作できます。
次のクラスには、 id
、 make
、 model
、 miles
プロパティを持つ Car
オブジェクトタイプを定義するスキーマが含まれています。 また、プライマリキーも定義します。
class Car extends Realm.Object { static schema = { name: "Car", properties: { _id: { type: "objectId", default: () => new Realm.BSON.ObjectId() }, make: "string", model: "string", miles: "int?", }, primaryKey: "_id", }; }
Realm スキーマ
Realm スキーマは、Realm に含めることができる有効なオブジェクト スキーマのリストです。 すべての Realm オブジェクトは、Realm のスキーマに含まれるオブジェクトタイプに準拠する必要があります。
Realm を開くときにすでにデータが含まれている場合、Realm は各オブジェクトを検証して、そのタイプにオブジェクト スキーマが提供されていること、およびスキーマで指定された制約をすべて満たしていることを確認します。
自動車とメーカーに関する基本データを含む Realm では、次のようなスキーマを使用する場合があります。
class Manufacturer extends Realm.Object { static schema = { name: "Manufacturer", properties: { _id: "objectId", // A manufacturer that may have many cars cars: "Car[]", }, }; } class Car extends Realm.Object { static schema = { name: "Car", properties: { _id: "objectId", make: "string", model: "string", miles: "int?", }, }; }
関係
Realm を使用すると、アプリ内のオブジェクトのタイプ間の明示的な関係を定義できます。 関係は、別の Realm オブジェクトタイプを参照するオブジェクト プロパティです。 プロパティ スキーマで、オブジェクトの プロパティを別のオブジェクトタイプに設定することで、関係を定義できます。
関係は、Realm 内の他のオブジェクトへの直接参照です。 関係データベースとは異なり、関係を定義するために、ブリッジテーブルや結合の作成は必要ありません。 代わりに、関係を定義するプロパティへの読み取りと書き込みにより、関連オブジェクトにアクセスできます。
Realm は読み取り操作を入力すると遅延して実行します。 関係のクエリは、通常のプロパティを読み取るのと同じ程度のパフォーマンスです。
オブジェクト間の関係には、次の 3 つのプライマリ タイプがあります。
注意
Realm と他のデータベース
オブジェクトには、多くの場合、他のオブジェクトへの直接参照が含まれています。 オブジェクトと参照を扱う場合は、多くの場合、データベース ストレージからアプリケーション メモリにコピーします。 この状況では、開発者はメモリにコピーする内容を選択できます。
参照されたオブジェクト全体を事前にコピーすることができます。 つまり、参照されたすべてのデータは常にすぐに利用できますが、多くのリソースを使用する可能性があります。 使用可能なメモリの量によっては、これは実行的ではない可能性があります。
必要な場合は、オブジェクト全体をクエリするために使用できる外部キー値のみをコピーできます。 これらの参照される検索はメモリ効率が高くなります。 ただし、より多くのクエリ コードが必要になるため、検索が多すぎるとアプリケーションが遅くなる可能性があります。
Realm のクエリ アーキテクチャは、メモリ使用量と計算オーバーヘッドの間のトレードオフを回避します。 代わりに、Realm クエリはディスク上の関連オブジェクトとそのプロパティを直接参照できます。