hik14
2020. 8. 24. 19:06
뷰 ( View )
- 허용된 데이터를 제한적으로 보여주기 위해서 하나 이상의 테이블에서부터 유도된 가상 테이블입니다.
장점
1. 논리적 독립성을 제공합니다.
2. 데이터 접근 제어로 보안 가능합니다.
- 뷰를 통해 접근하기 때문에 뷰에 나타나지 않는 데이터를 접근할 수 없다..
3. 사용자의 데이터 관리를 간단하게 합니다.
4. 하나의 테이블로 여러 개의 다른 뷰를 정의할 수 있습니다.
단점
1. 독자적인 인덱스를 가질 수 없습니다.
2. 한 번 정의된 뷰는 변경할 수 없으며, 삭제한 후에 다시 생성해야 합니다.
3. 삽입, 삭제, 갱신 연산에 많은 제약이 따릅니다.
2.1.0 이상 버전의 Room 지속성 라이브러리는 SQLite 데이터베이스 뷰를 지원하므로 쿼리를 클래스로 캡슐화할 수 있습니다. Room은 이러한 쿼리 지원 클래스를 뷰로 참조하며, 뷰는 DAO에서 사용될 때 단순한 데이터 객체와 동일하게 동작합니다
* Entity 마찬가지로 뷰에 관해 SELECT 문을 실행할 수 있습니다. 하지만 뷰에 관해 INSERT, UPDATE 또는 DELETE 문을 실행할 수는 없습니다.
@DatabaseView 애노테이션에 SQL 명령어를 사용하여 정의한다.
@DatabaseView("SELECT user.id, user.name, user.departmentId," +
"department.name AS departmentName FROM user " +
"INNER JOIN department ON user.departmentId = department.id")
data class UserDetail(
val id: Long,
val name: String?,
val departmentId: Long,
val departmentName: String?
)
이 뷰를 앱 데이터베이스의 일부로 포함하려면 앱의 @Database 주석에 views 속성을 포함하세요.
@Database(entities = arrayOf(User::class),
views = arrayOf(UserDetail::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}