对数据建模 - React Native SDK
每个 Realm 对象都符合特定的对象类型。 对象类型是您使用预定义模式定义的类,其中包含该类型对象的属性和关系。
域保证所有 Realm Object都符合对象类型的模式,并在创建、修改或删除对象时对其进行验证。
Realm 对象本质上与常见的 JavaScript 对象类似,但它们还带来了一些附加功能,例如模式验证和实时查询。
React Native SDK 内存将 Realm 对象直接映射到原生 JavaScript 对象,这意味着无需使用特殊的数据访问库,例如 ORM 。相反,您可以像使用任何其他对象一样使用 Realm 对象。
Realm 模式
Realm 模式是 Realm 可能包含的有效对象模式的列表。 每个 Realm 对象都必须符合其 Realm 模式中包含的对象类型。
如果 Realm 在打开时已包含数据,Realm 则会验证每个对象以确保为其类型提供了对象模式,且它满足该模式中指定的所有约束。
使用@realm/react
时,您可以通过将单个对象模式传递给RealmProvider
或createRealmContext()
来定义 Realm 模式。
import Profile from './Models/Profile'; import {createRealmContext} from '@realm/react'; export const SyncedRealmContext = createRealmContext({ // Pass all of your models into the schema value. schema: [Profile], });
关系
您可以定义 Realm 中对象之间的关系。 Realm 将关系建模为指向 Realm 中给定类型的其他对象的对象属性。 要在类型级别定义关系,您可以在类型的模式中声明一个属性,其中该属性的值为另一种对象类型。
查询关系与查询常规属性一样高效。 关系是对其他对象的直接引用,因此您不需要像在关系数据库中那样使用联接和复杂的模型来定义和使用它们。 相反,您可以通过直接读取和写入关系属性来访问相关对象。
对象之间主要有三种关系:
注意
Realm 与其他数据库对比
对象通常包含对其他对象的直接引用。 使用对象和引用时,通常会将数据从数据库存储复制到应用程序内存中。 在这种情况下,开发者可以选择将哪些内容复制到内存中:
您可以提前将所有引用的对象复制到内存中。 这意味着所有引用的数据始终可以快速使用,但可能会占用大量资源。 如果系统的内存有限,这可能不可行。
您可以仅为每个对象复制一个外键值。 稍后,您可以在需要时使用键来查找完整对象。 这些“惰性”查找比提前复制所有引用对象更节省内存。 但是,它们要求您维护更多查询代码并使用运行时查找,这可能会减慢应用程序的速度。
Realm 的查询架构避免了内存使用量和计算开销之间的权衡。 相反, Realm查询可以直接引用磁盘上的相关对象及其属性。