Tipos de objetos y esquemas
Cada objeto Realm se ajusta a un tipo de objeto específico, que es esencialmente una clase que define las propiedades y Relaciones para objetos de ese tipo mediante un esquema predefinido. Realm garantiza que todos los objetos de un reino se ajusten al esquema de su tipo y valida los objetos al crearlos, modificarlos o eliminarlos.
Los objetos Realm son básicamente similares a un objeto JavaScript común, pero también incorporan características adicionales como la validación de esquemas y las consultas en tiempo real. El SDK de Node.js asigna objetos Realm directamente a objetos JavaScript nativos, lo que significa que no es necesario usar una biblioteca especial de acceso a datos, como un ORM.. En cambio, puedes trabajar con objetos Realm como lo harías con cualquier otro objeto.
La siguiente clase contiene un esquema que define una Car Tipo de objeto con propiedades id, make, model y miles. También define una clave principal.
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", }; }
Esquema de reino
Un esquema de dominio es una lista de esquemas de objetos válidos que un dominio puede contener. Cada objeto de dominio debe cumplir con un tipo de objeto incluido en el esquema de su dominio.
Si un realm ya contiene datos cuando lo abres, Realm valida cada objeto para garantizar que se haya proporcionado un esquema de objeto para su tipo y que cumpla con todas las restricciones especificadas en el esquema.
Un reino que contiene datos básicos sobre automóviles y fabricantes podría utilizar un esquema como el siguiente:
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?", }, }; }
Relaciones
Realm permite definir relaciones explícitas entre los tipos de objetos de una aplicación. Una relación es una propiedad de un objeto que hace referencia a otro tipo de objeto de Realm. Se pueden definir relaciones asignando la propiedad de un objeto a otro tipo de objeto en el esquema de propiedades.
Las relaciones son referencias directas a otros objetos de un dominio. No es necesario crear tablas puente ni uniones para definir una relación, como en una base de datos relacional. En su lugar, se puede acceder a objetos relacionados leyendo y escribiendo en la propiedad que define la relación.
Realm ejecuta operaciones de lectura de forma diferida a medida que llegan. Consultar una relación es tan eficiente como leer una propiedad normal.
Hay tres tipos principales de relaciones entre objetos:
Nota
Realm vs. otras bases de datos
Los objetos suelen contener referencias directas a otros objetos. Al trabajar con objetos y referencias, se suele copiar desde el almacenamiento de la base de datos a la memoria de la aplicación. Esta situación deja al desarrollador con la opción de elegir qué copiar en la memoria:
Puede copiar todo el objeto referenciado con antelación. Esto significa que todos los datos referenciados siempre están disponibles rápidamente, pero puede consumir muchos recursos. Dependiendo de la cantidad de memoria disponible, esto podría no ser viable.
Puedes copiar solo un valor de clave foránea para cada objeto con antelación, el cual puedes usar para consultar el objeto completo si es necesario. Estas búsquedas referenciadas consumen mucha memoria. Sin embargo, requieren más código de consulta y un exceso de búsquedas puede ralentizar la aplicación.
La arquitectura de consultas de Realm evita la disyuntiva entre el uso de memoria y la sobrecarga computacional. En su lugar, las consultas de Realm pueden referenciar directamente los objetos relacionados y sus propiedades en el disco.