[android] 안드로이드 Room Database의 데이터베이스 다중 테이블 관리
안드로이드 앱을 개발하다 보면 종종 데이터베이스에서 여러 테이블을 사용해야 하는 상황이 있습니다. 안드로이드에서는 Room Persistence Library를 사용하여 데이터베이스를 다룰 수 있는데, 이때 다중 테이블을 관리하는 방법에 대해 알아보겠습니다.
데이터베이스 엔티티 정의하기
Room의 데이터베이스를 다중 테이블로 구성하려면 먼저 각 테이블에 대한 엔티티 클래스를 정의해야 합니다. 예를 들어, 사용자 정보와 그들의 주문 정보를 저장하는 경우에는 User
와 Order
두 개의 엔티티 클래스를 정의합니다.
@Entity
data class User(
@PrimaryKey val userId: Int,
val name: String
)
@Entity
data class Order(
@PrimaryKey val orderId: Int,
val userId: Int,
val product: String
)
데이터베이스 관계 설정
User
엔티티와 Order
엔티티 사이에는 일대다(One-to-Many) 관계가 있습니다. 이러한 경우에는 관계를 설정해주어야 합니다. Room에서는 @Relation
애노테이션을 사용하여 관계를 설정할 수 있습니다.
data class UserWithOrders(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userId"
)
val orders: List<Order>
)
DAO 클래스 작성
마지막으로, 데이터베이스 액세스 객체(DAO)를 작성하여 실제 데이터베이스 작업을 수행합니다. 다중 테이블을 다루기 위해서는 각 테이블에 대한 CRUD(Create, Read, Update, Delete) 메서드를 정의해야 합니다.
@Dao
interface UserDao {
@Query("SELECT * FROM User")
suspend fun getAllUsersWithOrders(): List<UserWithOrders>
// 다른 CRUD 메서드들...
}
이렇게 하면 User
테이블과 Order
테이블을 동시에 다루며, 필요에 따라 관련 정보를 함께 가져올 수 있습니다.
다중 테이블을 사용하는 안드로이드 Room Database의 관리는 이렇게 간단합니다. 각 엔티티의 관계를 설정하고, DAO에서 필요한 쿼리들을 정의하여 데이터베이스를 효과적으로 관리할 수 있습니다.
참고 링크: