문서 메뉴

문서 홈애플리케이션 개발Atlas Device SDK

관계 - C++ SDK

이 페이지의 내용

  • 관계 유형
  • 일대일 관계
  • To-Many 관계
  • 역관계
  • 관계 속성 선언
  • 대일 관계 정의
  • To-Many 관계 정의
  • 역관계 정의

Realm은 관계형 데이터베이스에서와 같이 관계를 정의하기 위해 브리지 테이블이나 명시적 조인을 사용하지 않습니다. Realm은 포함된 객체나 다른 Realm 객체에 대한 참조 속성을 통해 관계를 처리합니다. 이러한 속성에서 직접 읽고 쓸 수 있습니다. 이렇게 하면 다른 속성을 쿼리하는 것처럼 관계 쿼리 성능이 향상됩니다.

Realm은 to-one, to-many 관계를 지원합니다. Realm은 내장된 객체 라는 특수한 유형의 객체도 제공하며, 이 객체는 개념적으로 관계와 유사하지만 추가 제약 조건을 제공합니다.

대일 관계는 객체가 다른 객체와 관련되어 있음을 의미합니다. 객체 모델에서 Realm 객체 유형에 대한 관계를 정의합니다. 유형이 관련 Realm 객체 유형인 속성을 지정합니다. 예를 들어, 개는 좋아하는 장난감과 대일 관계를 가질 수 있습니다.

대다 관계란 한 객체가 둘 이상의 다른 객체와 관련되어 있음을 의미합니다. Realm에서 대다 관계는 다른 객체에 대한 참조 목록입니다. 예를 들어, 한 사람이 여러 마리의 개를 키우고 있을 수 있습니다.

두 Realm 유형 간의 대다 관계를 목록, 맵 또는 세트로 표현할 수 있습니다. 목록, 맵 및 세트는 변경 가능합니다: 쓰기 트랜잭션 (write transaction) 내에서 이러한 collection 유형에 요소를 추가하고 제거할 수 있습니다. 목록, 지도 및 세트는 쿼리와 연결되지 않으며 객체 모델의 속성으로 선언됩니다.

Realm의 관계 정의는 단방향입니다. 역관계는 해당 객체를 참조하는 객체에 다시 연결합니다.

역관계 속성은 자동 역링크 관계입니다. Realm은 해당 일대다 목록 또는 일대일 관계 속성에서 객체가 추가되거나 제거될 때마다 암시적 관계를 자동으로 업데이트합니다. 역관계 속성의 값은 수동으로 설정할 수 없습니다.

다음도 참조하세요.

또는 App Services 앱에서 관계를 정의 할 수 있습니다.

대일 관계는 한 속성을 Realm 객체 유형의 단일 인스턴스에 매핑합니다. 예를 들어, 좋아하는 장난감을 하나만 가지고 있는 개를 일대일 관계로 모델링할 수 있습니다.

관계 필드를 null로 설정하면 객체 간의 연결이 제거됩니다. 그러나 Realm은 내장된 객체가 아닌 이상 참고 객체를 삭제하지 않습니다.

중요

대일 관계는 선택 사항이어야 합니다.

객체 모델에서 대일 관계를 선언할 때는 선택적 속성이어야 합니다. 대일 관계를 필수로 만들려고 하면 Realm은 런타임에 예외를 발생시킵니다.

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)

대다 관계는 한 속성을 Realm 객체 유형의 0개 이상의 인스턴스에 매핑합니다. 예를 들어 직원 수에 관계없이 회사를 to-many 관계로 모델링할 수 있습니다.

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)

역관계를 정의하려면 객체 모델에서 linking_objects 를 사용합니다. linking_objects 정의는 역관계의 Realm 객체 유형과 속성 이름을 지정합니다.

이 예에서는 Dog 와 대일 관계를 가진 Person 를 정의합니다. Dogowners 속성을 통해 모든 Person 객체와 역관계를 갖습니다.

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)
← 지원되는 유형 - C++ SDK