Room 라이브러리를 사용하여 안드로이드 앱의 데이터베이스를 관리할 때, 다양한 테이블 사이의 관계를 설정할 수 있습니다. 이 글에서는 Room에서 데이터베이스의 관계를 설정하는 방법에 대해 알아보겠습니다.
1. 일대다 관계 설정하기
Room에서 일대다 관계는 @Relation
어노테이션을 사용하여 설정할 수 있습니다. 예를 들어, 하나의 엔터티가 다수의 하위 엔터티를 가지는 경우에 해당합니다.
data class Library(
@Embedded val library: LibraryEntity,
@Relation(
parentColumn = "libraryId",
entityColumn = "libraryOwnerId"
)
val books: List<BookEntity>
)
위의 예시에서 Library
엔터티는 LibraryEntity
를 포함하고 있으며, libraryId
와 libraryOwnerId
컬럼을 기반으로 BookEntity
의 리스트를 가져오게 됩니다.
2. 다대다 관계 설정하기
데이터베이스의 다대다 관계는 중간 테이블을 사용하여 정의됩니다. Room에서는 @Ignore
어노테이션과 함께 중간 엔터티를 사용하여 다대다 관계를 구현할 수 있습니다.
data class UserWithPlaylists(
@Embedded val user: UserEntity,
@Relation(
parentColumn = "userId",
entity = PlaylistEntity::class,
entityColumn = "playlistId",
associateBy = Junction(
value = UserPlaylistCrossRef::class,
parentColumn = "userId",
entityColumn = "playlistId"
)
)
val playlists: List<PlaylistEntity>
)
위의 예시에서 UserWithPlaylists
엔터티는 UserEntity
를 포함하고 있으며, 중간 엔터티 UserPlaylistCrossRef
를 사용하여 PlaylistEntity
의 리스트를 가져오게 됩니다.
3. 하나의 엔터티에 여러 관계 설정하기
하나의 엔터티에서 여러 관계를 설정해야 하는 경우 @Relation
어노테이션을 여러 번 사용할 수 있습니다. 예를 들어, 하나의 엔터티가 여러 하위 엔터티를 가지고 있으며, 각 하위 엔터티와의 관계를 설정해야 할 때 해당합니다.
data class SchoolWithTeachersAndStudents(
@Embedded val school: SchoolEntity,
@Relation(
parentColumn = "schoolId",
entityColumn = "schoolOwnerId"
)
val teachers: List<TeacherEntity>,
@Relation(
parentColumn = "schoolId",
entityColumn = "schoolOwnerId"
)
val students: List<StudentEntity>
)
위의 예시에서 SchoolWithTeachersAndStudents
엔터티는 SchoolEntity
를 포함하고 있으며, teachers
와 students
리스트를 각각 가져오게 됩니다.
이와 같이 Room 라이브러리를 사용하여 안드로이드 앱의 데이터베이스에서 관계를 설정하는 방법에 대해 알아보았습니다. 이러한 관계 설정을 통해 데이터베이스를 효율적으로 구성하고, 데이터를 관리하는데 도움이 될 것입니다.
참고 자료: Android Developers - Define relationships between objects