View
View란 테이블에 대한 가상의 테이블로써 테이블처럼 직접 데이터를 소유하지 않고 검색 시에 이용할 수 있도록 정보를 담고 있는 객체를 의미합니다. 만약 특정 컬럼들을 여러 번 조회해야 한다면 똑같은 SELECT문을 여러 번 반복해야 하는데, 뷰에 해당 쿼리문을 저장함으로써 빠르고 간편하게 조회가 가능합니다. 자주 질의되는 SQL문을 View라는 가상 테이블로 저장.
View의 특징
- 데이터의 논리적 독립성
- 예를 들어, 기존의 instructor 테이블이 professor(pid, name, dept), lecturer(lid, name, major, address)로 분할되었다. 이때 View의 instructor 컬럼 리스트의 이름과 타입은 기존의 insturctor 테이블과 동일하므로 기존의 응용프로그램은 수정 없이 그대로 사용할 수 있다.
- 데이터의 보안이 향상된다. 사용자들에겐 테이블 대신 뷰에 대한 접근 권한만 제공하는 방식.
- 변경의 항시적 반영: 뷰의 정의(SQL 질의문)에 대한 질의 처리를 통해 데이터 계산이 이루어지므로 변경이 항시 자동 반영된다.
- 성능상의 단점: 뷰에 대한 질의가 발생할 때마다 질의 처리가 이루어진다.
CREATE VIEW instructor(pid, name, dept) AS
(SELECT * FROM professor)
UNION
(SELECT lid, name, major FROM lecturer);
예시. 전산학 과목들을 나타내는 View
CREATE VIEW cs_course (co_id, co_name, inst_name, prerequisite) AS
SELECT C.id, C.name, c.prerequisite FROM cource C, instructor I
WHERE I.dept='cs' AND I.pid=C.insturctor;
위의 생성한 View에 대한 질의
SELECT co_id, co_name FROM cs_course
WHERE inst_name = '홍길동';
MySQL에서의 View 구현 방법
- TEMPTABLE: View의 정의에 대한 임시적인 테이블을 생성하고 이에 대해 질의를 실행
- MERGE: View에 대한 질의 사용 시, 질의와 view의 정의를 통합한 질의 생성
MySQL에서의 view의 특징: 테이블의 인덱스는 merge로 구현된 경우에만 적용가능하며, from절에는 중첩 질의가 불가능하다. 또한, view 정의 시 중첩 질의는 where 절에만 허용된다.
CREATE VIEW SalesPreOrder AS
SELECT orderNumber, SUM(quantityOrdered * priceEach) total
FROM orderDetails
GROUP BY ordeNumber
ORDER BY total DESC;
MySQL에서의 Udatable View
아래의 조건을 만족하는 view는 갱신이 가능하다.
- View의 select문이 집계함수, join, union 등을 포함하지 않는 경우
- From절에 non-updatable view가 사용되지 않은 경우
- Merge 알고리즘을 사용한 경우
CREATE VIEW offiseInfo AS
SELECT offficeCode, phone, city FROM offices;
#view에 대한 갱신
UPDATE officeInfo
SET phone ='+33 14 723 5555'
WHERE officeCode=4;
DELETE FROM officeInfo WHERE officeCode=4;
View가 갱신 가능한 지 확인하는 방법
SELECT table_name, is_updatable
FROM information_schema.views
WHERE table_schema ='classicmodels';
'Domain > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 9. 인덱스와 인덱스 구조별 비용 추정 (0) | 2021.01.04 |
---|---|
[데이터베이스] 8. ESQL(Embedded SQL)와 프로시저(Procedure) (0) | 2020.07.23 |
[데이터베이스] 6. 무결성 제약 조건 (0) | 2020.07.23 |
[데이터베이스] 5. 데이터의 입력, 삭제, 수정 (0) | 2020.07.22 |
[데이터베이스] 4. MySQL 중첩질의문 (0) | 2020.07.22 |