[android] 안드로이드 Room Database의 데이터베이스 다중 테이블 관리

안드로이드 앱을 개발하다 보면 종종 데이터베이스에서 여러 테이블을 사용해야 하는 상황이 있습니다. 안드로이드에서는 Room Persistence Library를 사용하여 데이터베이스를 다룰 수 있는데, 이때 다중 테이블을 관리하는 방법에 대해 알아보겠습니다.

데이터베이스 엔티티 정의하기

Room의 데이터베이스를 다중 테이블로 구성하려면 먼저 각 테이블에 대한 엔티티 클래스를 정의해야 합니다. 예를 들어, 사용자 정보와 그들의 주문 정보를 저장하는 경우에는 UserOrder 두 개의 엔티티 클래스를 정의합니다.

@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에서 필요한 쿼리들을 정의하여 데이터베이스를 효과적으로 관리할 수 있습니다.

참고 링크: