티스토리 뷰

뷰 (View)

: 사용자에게 자료를 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 가상 테이블

(테이블은 디스크 공간이 할당되어 데이터를 저장함 / 뷰는 데이터 딕셔너리 테이블에 뷰에 대한 정의만 저장)

 

물리적으로 존재하지 않고 논리적 데이터 독립성을 가짐

정의된 뷰를 다른 뷰의 정의의 베이스가 될 수 있음

뷰를 삭제하면 그 뷰를 베이스로 정의된 뷰도 자동 삭제됨

기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능

DML 구문 적용 시 기본 테이블 데이터도 변경됨

 

변경 연산(삽입, 삭제, 갱신) 불가능한 경우

- 뷰의 열이 산술식(상수, 연산자, 함수)

- 집단함수, distinct, group by 등이 사용되어 정의된 뷰

- 두 개 이상의 테이블과 관련되어 정의된 뷰

 

장점

- 논리적 데이터 독립성 제공

- 자료에 대한 접근 제어로 보안 제공

- 동일 데이터에 대해 여러 사용자의 상이한 응용이나 요구 지원 가능

 

단점

- 독립적인 인덱스를 가질 수 없음

- 뷰의 정의를 변경할 수 없음 (ALTER문 사용 불가)

- 질의 쿼리 성능 저하 가능

 

CREATE VIEW 뷰이름[속성이름] AS SELECT ...

CREATE VIEW 컴공학생(학번, 이름)
AS SELECT 학번 이름
FROM 학생
WHERE 학과 = '컴퓨터공학';

DROP VIEW 뷰이름 {RESTRICT | CASCADE}
# RESTRICT: 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소됨
# CASCADE: 뷰를 참조하는 다른 뷰나 제약조건까지 삭제

 

 

 

WITH CHECK OPTION

: 뷰에 대한 갱신이나 삽입 연산 시 뷰 정의 조건을 위반하면 실행 불가

- 튜플이 뷰에서 사라지지 않도록 보호함 

- 데이터의 무결성 유지

- 뷰의 정의 조건에 위배된 튜플을 생성할 수 없음

CREATE VIEW 컴공학생(학번, 이름)
AS SELECT 학번 이름 학과
FROM 학생
WHERE 학과 = '컴퓨터공학'
WITH CHECK OPTION;

UPDATE 컴공학생 SET 학과 = '수학' WHERE 학번 = 001;
# WITH CHECK OPTION의 조건에 위배


WITH READ ONLY

: 뷰를 통해 테이블 수정 불가

CREATE VIEW 컴공학생(학번, 이름)
AS SELECT 학번 이름 학과
FROM 학생
WHERE 학과 = '컴퓨터공학'
WITH READ ONLY;

UPDATE 컴공학생 SET 학과 = '수학' WHERE 학번 = 001;
# 읽기 전용 뷰에서는 DML 작업 수행 불가
댓글