Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

relacionamento - C++ SDK

Nesta página

  • Tipos de relacionamento
  • Relacionamento para um
  • Relacionamento com muitos
  • Relacionamento inverso
  • Declarar propriedades de relacionamento
  • Definir um relacionamento um-para-um
  • Definir um relacionamento para muitos
  • Definir um relacionamento inverso

O Realm não usa tabelas de ponte ou junções explícitas para definir relações como você faria em um banco de dados relacional. O Realm lida com relações por meio de objetos incorporados ou propriedades de referência a outros objetos do Realm. Você lê e grava diretamente nessas propriedades. Isso torna a query de relações tão eficiente quanto a query de qualquer outra propriedade.

O Realm oferece suporte a relacionamentos um-para-um, um -para-muitos e inversos . O Realm também fornece um tipo especial de objeto, chamado objeto incorporado, que é conceitualmente semelhante a um relacionamento, mas fornece restrições adicionais.

Um relacionamento entre si significa que um objeto está relacionado a outro objeto. Você define um relacionamento para um Tipo de objeto de Realm em seu modelo de objetos. Especifique uma propriedade onde o tipo é o Tipo de objeto de Realm. Por exemplo, um cão pode ter um relacionamento entre si com um brinquedo favorito.

Uma relação de muitos significa que um objeto está relacionado a mais de um outro objeto. No Realm, uma relação entre muitos é uma lista de referências a outros objetos. Por exemplo, uma pessoa pode ter muitos cachorros.

Você pode representar uma relação entre dois tipos de Realm como uma lista, mapa ou um conjunto. Listas, mapas e conjuntos são mutáveis: dentro de uma transação de escrita, você pode adicionar e remover elementos de e para esses tipos de collection. Listas, mapas e conjuntos não estão associados a uma query e são declarados como propriedade do Realm Object Model.

As definições de relação no Realm são unidirecionais. Uma relação inversa vincula um objeto de volta a um objeto que se refere a ele.

Uma propriedade de relacionamento inversa é um relacionamento de backlink automático. O Realm atualiza automaticamente os relacionamentos implícitos sempre que um objeto é adicionado ou removido em uma lista de muitos ou em uma propriedade de relacionamento de um para um correspondente. Você não pode definir manualmente o valor de uma propriedade de relacionamento inversa.

Dica

Veja também:

Como alternativa, você pode definir seus relacionamentos no App Services App.

Um relacionamento entre si mapeia uma propriedade para uma instância única de outro tipo de objeto. Por exemplo, você pode modelar um cão com, no máximo, um brinquedo favorito como um relacionamento para um.

Definir um campo de relacionamento como nulo remove a conexão entre objetos. No entanto, o Realm não exclui o objeto referenciado, a menos que seja um objeto incorporado.

Importante

Relacionamentos um-para-um devem ser opcionais

Quando você declara um relacionamento um-para-um no modelo de objeto, ele deve ser uma propriedade opcional. Se você tentar tornar um relacionamento um-para-um obrigatório, o Realm lançará uma exceção em tempo de execução.

struct FavoriteToy {
realm::primary_key<realm::uuid> _id;
std::string name;
};
REALM_SCHEMA(FavoriteToy, _id, name)
struct Dog {
realm::primary_key<realm::uuid> _id;
std::string name;
int64_t age;
// Define a relationship as a link to another SDK object
FavoriteToy* favoriteToy;
};
REALM_SCHEMA(Dog, _id, name, age, favoriteToy)

Um relacionamento para muitos mapeia uma propriedade para zero ou mais instâncias de outro Tipo de objeto de Realm. Por exemplo, você pode modelar uma empresa com qualquer número de funcionários como um relacionamento para-muitos.

struct Company {
int64_t _id;
std::string name;
// To-many relationships are a list, represented here as a
// vector container whose value type is the SDK object
// type that the list field links to.
std::vector<Employee*> employees;
};
REALM_SCHEMA(Company, _id, name, employees)

Para definir um relacionamento inverso, utilize linking_objects no seu Realm Object Model. A definição linking_objects especifica o tipo de objeto e o nome da propriedade do relacionamento que inverte.

Neste exemplo, definimos um Person tendo um relacionamento entre si com um Dog. O Dog tem uma relação inversa com quaisquer objetos Person através de sua propriedade owners .

struct Dog;
struct Person {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age = 0;
Dog* dog;
};
REALM_SCHEMA(Person, _id, name, age, dog)
struct Dog {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age = 0;
linking_objects<&Person::dog> owners;
};
REALM_SCHEMA(Dog, _id, name, age, owners)
← Tipos suportados - C++ SDK