-
database - 뷰database 2019. 4. 13. 05:58
뷰
가상 릴레이션 : 실제로 튜플을 갖지 않는 릴레이션
기본 릴레이션(base relation 실제 릴레이션)이나 또 다른 뷰에 대한 SELECT문의 형태로 정의된다.
사용자가 질의할 수 있다.
사용자에게 뷰는 같은 방법으로 조작할 수 있는 정상적인 릴레이션처럼 보인다.
뷰에 대한 연산은 뷰 정의에 사용된 기본 릴레이션에 대한 연산으로 변환되어 수행된다.
동적인 창(dynamic window) 역할을 한다.
기본릴레이션에 대한 갱신 연산은 유도된 뷰에 즉시 반영된다.
스냅샷(snapshot)
어느 시점에 SELECT 문의 결과를 기본 릴레이션의 형태로 저장해 놓은것
일부 관계DBMS들은 스냅샷을 구체화된 뷰(materialized view)라고 부른다.
스냅샷은 기본릴레이션에 대한 갱신이 반영되지 않는다.
그러므로 새롭게 refresh 해야한다.
데이터베이스는 공유자원이므로 각 사용자에게 서로 다른 뷰를 제공하는 것이 유용하다.
뷰는 하나의 기본 릴레이션을 사용자마다 서로 다르게 볼 수 있도록 한다.
뷰 정의
CREATE VIEW 뷰이름 [애트리뷰트(들)] AS SELECT문 [WITH CHECK OPTION];SELECT문의 결과과 뷰의 대상이된다
SELECT문은 여러 릴레이션을 참조할 수 있고,
여러 단계로 중첩된 SELECT 문도 가능하다.
하지만 ORDER BY절은 포함될 수 없다.
(정의된 뷰에는 ORDER BY절을 사용할 수 있다.)
뷰에 참조되는 것은 릴레이션뿐만아니라 뷰로 뷰를 정의할 수도있다.
WITH CHECK OPTION을 부여하면 무결성 제약조건과 데이터 유효성 검사를 시행한다.
유도된 뷰도 질의어로 동일한 방법을 통해 데이터 검색연산 가능
어떤 뷰에 대해서는 갱신 연산이 불가(거절)할 수도 있다.
뷰 연산 과정
시스템 카탈로그로부터 뷰의 정의(SELECT문)을 검색
기본 릴레이션에 대한 뷰의 접근 권한 검사
뷰에대한 질의를 기본 릴레이션에 대한 동등한 질의로 변환
즉 뷰에대한 연산은 결국 기본 릴레이션에서 이루어짐
뷰 제거
DROP VIEW 뷰이름뷰를 직접 제거하거나 기본 릴레이션에 대한 SELECT 권한을 잃으면 뷰가 삭제된다.
뷰 생성자 또는 적절한 권한을 가진 사용자만이 뷰를 제거할 수 있다.
뷰가 삭제되면 기본 릴레이션이 삭제되진 않지만
뷰를 기반으로 하는 뷰나 기타 응용들은 무효화된다.
뷰의 장점
- 복잡한 질의를 간단하게 표현가능
복잡한 질의에 대한 연산을 뷰로 정의해두면 뷰를 통한 질의로 더 쉽게 사용할 수 있다.
- 데이터 무결성을 보장하는데 활용
WITH CHECK OPTION은 INSERT문과 UPDATE문이 뷰가 선택할 수 없는 튜플들을 생성할 수 없도록 보장한다.
(튜플이 뷰에서 사라지도록 튜플을 수정하려하면 수정이 취소되고 오류가 표시된다.)
- 데이터 보안 기능을 제공
기본릴레이션에 직접 접근할 수 있는 권한을 부여하지 않는다.
기본 릴레이션에 대해 사용자가 알 필요 없게한다.
- 동일한 데이터에 대한 여러 가지 뷰를 제공
사용자 그룹이 각자 특정한 기준에 따라 데이터를 접근하도록 한다.
뷰는 장점이 있지만 모든 뷰가 갱신연산이 가능한 것이 아니며, 성능이 약간 저하될 수 있다.
갱신이 불가능한 뷰
- 기본키와 엔티티 무결성 제약조건에 위배된 경우
뷰 애트리뷰트에 기본 릴레이션의 기본키가 포함되지 않는 경우
뷰에 대한 삽입연산은 엔티티 무결성 제약조건에 위배되어 거절된다.
- 뷰에 포함되지 않는 애트리뷰트중 NOT NULL이 지정된 경우
뷰를 통해 해당 애트리뷰트에 값을 입력하는 것은 불가능 하다.
결국 NULL값이 들어가게 되므로 연산이 거절된다.
- 집단 함수등을 포함한 뷰에 대한 갱신
SUM, AVG, MIN, MAX, COUNT, GROUP BY, HAVING등의 구성요소가 포함된 뷰는
본질적으로 갱신이 불가능. 실제 튜플에 어떻게 반영해야 할지 결정할 수 없기 때문
- 조인으로 정의된 뷰
많은 DBMS에서 두 개 이상의 릴레이션을 사용하여 정의된 뷰의 갱신을
허용하지 않는다. 갱신 연산이 기본 릴레이션에 대한 갱신으로 정확하게 대응하지 않을 수 있다.
'database' 카테고리의 다른 글
물리적 데이터베이스 설계 (인덱스) (0) 2019.05.09 관계 DBMS - 시스템 카탈로그 (0) 2019.04.13 릴레이션 정규화 (0) 2019.04.13 데이터베이스 설계 개요 (0) 2019.04.12 database - ER 모델 (0) 2019.04.12