관계 - Flutter SDK
이 페이지의 내용
Realm 모델에서 다른 Realm 모델을 참조할 수 있습니다. 이를 통해 Realm 객체 간에 다음과 같은 유형의 관계를 만들 수 있습니다.
한 Realm 객체를 다른 Realm 객체 안에 직접 포함시켜 중첩 데이터 구조를 만들 수도 있습니다. 내장된 객체는 관계와 비슷하지만 추가 제약 조건을 제공합니다. 이러한 제약 조건과 내장된 객체를 만드는 방법에 대한 자세한 내용은 내장된 객체 데이터 유형 문서를 참조하세요.
팁
관련 객체 쿼리
Flutter v1.9.0 이상에서는 getBacklinks() 메서드를 사용하여 관계 를 통해 다른 객체 에 연결되는 객체를 찾습니다. 자세한 내용은 쿼리 관련 객체를 참조하세요.
일대일 관계
대일 관계는 객체가 특정 방식으로 하나 이상의 다른 객체와 관련되지 않음을 의미합니다.
대일 관계를 설정하려면 유형이 다른 모델인 모델에 속성을 만듭니다. 여러 객체가 동일한 객체를 참조할 수 있습니다.
중요
대일 관계는 선택 사항이어야 합니다.
객체 모델에서 대일 관계를 선언할 때는 선택적 속성이어야 합니다. 대일 관계를 필수로 만들려고 하면 Realm은 런타임에 예외를 발생시킵니다.
()class _Bike { () late ObjectId id; late String name; late _Person? owner; } ()class _Person { () late ObjectId id; late String firstName; late String lastName; late int? age; }
To-Many 관계
대다 관계는 객체가 특정 방식으로 여러 객체와 관련되어 있음을 의미합니다.
애플리케이션에서 List<T>
유형의 속성을 사용하여 하나의 객체와 여러 객체 간의 관계를 만들 수 있습니다. 여기서 T는 Realm 모델 클래스입니다.
()class _Scooter { () late ObjectId id; late String name; late _Person? owner; } ()class _ScooterShop { () late ObjectId id; late String name; late List<_Scooter> scooters; }
역관계
역관계는 Realm 객체를 대일 또는 대다 관계에서 참조하는 다른 영역 객체와 다시 연결합니다.
역관계는 다음과 같은 속성을 갖습니다.
객체 모델의 속성을 역관계로 명시적으로 정의해야 합니다. 스키마는 역관계를 추론할 수 없습니다.
역관계는 해당 백링크로 자동으로 업데이트됩니다. 수동 쿼리로 동일한 Realm 객체 세트를 찾을 수 있지만 역 관계 필드는 상용구 쿼리 코드와 오류 용량을 줄여줍니다.
역관계 속성의 값은 수동으로 설정할 수 없습니다. 대신 Realm은 관계에 객체를 추가하거나 제거할 때 암시적 관계를 업데이트합니다.
역링크는 Realm 객체에서만 작동합니다. 아직 영역에 추가되지 않은 객체에는 역링크가 없습니다.
예를 들어, "사용자에게 많은 작업이 있음"이라는 대다 관계는 "작업이 한 명의 사용자에게 속함"이라는 역관계를 자동으로 생성하지 않습니다. 작업 객체 모델에서 역관계를 지정하지 않으면 별도의 쿼리를 실행하여 특정 항목에 할당된 사용자를 조회해야 합니다.
역링크 사용 속성 주석 을 사용하여 관계 를 정의합니다. 기호 전달 에 대한 인수로 역 역링크 를 생성하려는 대일 또는 대다 필드 Backlink()
의 필드 이름입니다. 주석 아래 필드 에 백링크하려는 객체 모델 의 Iterable
를 포함합니다.
()class _User { () late ObjectId id; late String username; // One-to-many relationship that the backlink is created for below. late List<_Task> tasks; } ()class _Task { () late ObjectId id; late String description; late bool isComplete; // Backlink field. Links back to the `tasks` property in the `_User` model. (#tasks) late Iterable<_User> linkedUser; }
참고
Device Sync 스키마에 역관계가 존재하지 않음
Atlas Device Sync를 사용하는 경우 App Services App의 서버 측 Device Sync 스키마에 역관계가 존재하지 않습니다. 역관계 값을 직접 설정할 수 없으므로 Device Sync 스키마에는 해당 관계가 존재하지 않습니다.
서버 측 장치 동기화 스키마에 대한 자세한 내용은 Atlas App Services 설명서에서 데이터 모델 구성 및 업데이트를 참조하세요.