Object Types & Schemas
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", }; }
Realm Schema
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.
A realm that contains basic data about cars and manufacturers might use a schema like the following:
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 en una aplicación. Una relación es una propiedad de objeto que hace referencia a otro tipo de objeto Realm. Puedes definir relaciones configurando la propiedad de un objeto a otro tipo de objeto Realm 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 executes read operations lazily as they come in. Querying a relationship is just as performant as reading a regular property.
Hay tres tipos principales de relaciones entre objetos:
Nota
Realm vs Other Databases
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:
You can copy the entire referenced object ahead of time. This means that all referenced data is always available quickly, but can use up a lot of resources. Depending on the amount of available memory this may not be 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.