뷰의 개념

  • 다른 테이블을 기반으로 만들어진 가상 테이블 (virtual relation)

  • 일반 테이블은 물리적으로 존재하고, 실제 데이터를 저장하지만

  • 뷰는 논리적으로만 존재하고, 일반 테이블과 동일한 방법으로 사용한다

    • view를 찾아내면 view를 정의한 쿼리문을 대치한다
  • 기본 테이블이나 다른 뷰로 새로운 뷰를 생성한다




뷰의 생성

  • CREATE VIEW 명령어

  • ORDER BY를 사용할 수 없다는 점을 제외하면 일반 SELECT문과 동일

  • CHECK OPTION
    : 수정한 뷰에 연산 시 WHERE 조건을 위반하면 수행하지 않도록 하는 제약조건

  • 뷰에 삽입, 수정, 연산은 기본 테이블의 내용을 바꾸기 때문에 주의해서 사용


뷰의 생성 기본형

CREATE VIEW 뷰_이름[(속성_리스트)] AS
	SELECT[WITH CHECK OPTION];

뷰의 생성 예시

instructor 테이블의 salary는 숨기고 name과 department만 보여줌

create view faculty as
	select ID, name, dept_name
    from instructor

'Biology' 학부에서 모든 강사의 이름을 가져오기

  • faculty라는 테이블 정보를 가져오지 않고, faculty를 만들 때 입력한 명령어를 복붙하는 방식
select name
from faculty
where dept_name= 'Biology'

왓슨 건물에서 강의한 수업 중 couse_id와 교실번호를 추출

create view physics_fall_2017_watson as
	select course_id, room_number
    from physics_fall_2017
    where building= 'Watson';

view를 찾아내면 view를 정의한 쿼리문을 대치한다

create view physics fall_2017 as
		select course.course_id, sec_id, building, room_number
		from course, section
		where course.course_id= section.course_id
				and course.dept_name= 'Physics'
				and section.semester= 'Fall'
				and section.year= '2017';
create view physics_fall_2017_watson as
	select course_id, room_number
    from (select course.course_id, building, room_number
    	from course, section
        where course.course_id= section.course_id
        	and course.dept_name= 'Physics'
            and section.semester= 'Fall'
            and section.year= '2017')
	where building= 'Watson';



뷰의 삭제

  • DROP VIEW 명령어 이용

뷰의 삭제 기본형

DROP VIEW 뷰_이름;



변경 불가능한 뷰

뷰를 삽입, 수정, 삭제 연산을 하면 기본 테이블의 내용이 바뀐다.

  • 검색은 모든 뷰에서 가능

  • 삽입, 수정, 삭제 연산이 불가능한 뷰도 있다

    • 기본 테이블의 PK 속성이 포함되지 않은 뷰 (기본 테이블의 PK가 not null로 지정될 경우)
    • 기본 테이블 내용이 아닌 집계 함수로 새로 계산된 뷰
    • DISTANT, GROUP BY를 포함하여 정의한 뷰
    • 여러 테이블을 조인하여 정의한 뷰



뷰의 장점

  1. 쿼리문 쉽게 작성 가능
    WHERE 절을 줄여 복잡한 SQL문 작성하지 않아도 됨

  2. 데이터의 보안 유지
    사용자의 요구에 맞게 다양한 뷰를 미리 정의해서, 뷰에 접근 권한 설정

  3. 데이터를 편리하게 관리
    사용자는 제공된 뷰에만 신경 쓰면 됨




Materialized Views

뷰를 많이 사용할수록 성능 저하 -> view를 실체화해서 저장하는 기능 도입 = materialized view

  • MView는 물리적으로 존재하는 테이블
  • 자주 사용되는 뷰를 MView로 만들어 수행 속도 향상

출처: 데이터베이스 개론, Database System Concepts

profile
세요

0개의 댓글

Powered by GraphCDN, the GraphQL CDN