티스토리 뷰
뷰 (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 작업 수행 불가
'Computer Science > Database' 카테고리의 다른 글
[Database] 트랜잭션 회복 기법 (Recovery) (0) | 2022.09.03 |
---|---|
[Database] 트랜잭션(Transaction) / ACID (0) | 2022.08.31 |
[Database] 반정규화 / 역정규화 (Denormalization) (0) | 2022.08.29 |
[Database] 정규화(Normalization) 개념 및 예시 (0) | 2022.08.28 |
[Database] 함수적 종속 (Functional Dependency) (0) | 2022.08.28 |
댓글