[DB] 뷰(View) 개념

Yujeong·2024년 7월 14일
0

데이터베이스

목록 보기
6/14
post-thumbnail

뷰의 의미

뷰(View)는 하나 이상의 결과 집합을 나타내는 가상 테이블이다.

논리적 모델의 일부로서가 아니고, 가상적인 릴레이션으로서 사용자에게 보이는 릴레이션을 의미한다. 뷰는 시스템 카탈로그(system catalog)에 저장된다.

  • 가상 릴레이션: 실제로 튜플(tuple)을 갖지 않는 릴레이션

뷰의 특징

장점

  1. 보안 강화
    뷰를 사용하여 민감한 데이터를 숨기고, 사용자가 접근할 수 있는 데이터의 범위를 제한할 수 있다.
    예시) 직원 테이블에서 급여 정보만 제외하고 나머지 정보를 제공하는 뷰를 생성하여 일반 사용자에게 제공

  2. 쿼리 단순화
    복잡한 SQL 쿼리를 미리 정의된 뷰로 캡슐화하여, 간단하게 사용할 수 있다.
    이를 통해 쿼리 작성의 복잡성을 줄이고, 유지보수를 쉽게 할 수 있다.
    예시) 여러 테이블을 조인하여 자주 사용되는 정보를 하나의 뷰로 생성하여, 뷰를 간단히 조회할 수 있다.

  3. 데이터 일관성 유지
    자주 사용되는 계산이나 변환 로직을 뷰로 정의하면, 데이터의 일관성을 유지할 수 있다. 모든 사용자와 애플리케이션이 동일한 방식으로 데이터를 처리하게 된다.
    예시) 환율을 적용하여 가격을 변환하는 로직을 뷰로 생성하면, 모든 사용자가 일관된 가격 정보를 보게 된다.

  1. 데이터 무결성
    뷰를 통해 튜플을 추가하거나 수정할 때, 튜플이 뷰를 정의하는 SELECT문의 WHERE절의 기준에 맞지 않으면 뷰의 내용에서 사라진다.
    하지만, 뷰와 WITH CHECK OPTION을 함께 정의하면 데이터의 무결성을 유지할 수 있다.

  2. 데이터 독립성 제공
    뷰를 사용하여 물리적 데이터베이스 구조의 변경이 응용 프로그램에 미치는 영향을 최소화할 수 있다.
    예시) 기본 테이블의 구조가 변경되더라도 뷰의 정의를 수정함으로써 응용 프로그램에 필요한 데이터는 동일한 형식으로 제공할 수 있다.

  3. 동일한 데이터에 대한 여러 가지 뷰 제공
    예시) 직원 데이터에 대해 부서별, 직급별, 지역별 등의 여러 가지 뷰를 생성하여 사용자 요구에 맞는 다양한 데이터를 제공할 수 있다.

단점

  1. 성능 저하 가능성
    뷰가 복잡한 쿼리를 포함하고 있거나, 여러 테이블을 조인하고 있을 경우, 뷰를 사용할 때마다 해당 쿼리가 실행되어 성능 저하를 초래할 수 있다.
    예시) 수백만 개의 행이 있는 테이블을 조인하는 뷰를 자주 조회하면, 데이터베이스의 성능이 저하될 수 있다.

  2. 제한된 업데이트 기능
    모든 뷰가 업데이트 가능한 것은 아니다. 특히, 여러 테이블을 조인하거나 집계 함수를 사용하는 뷰는 업데이트, 삽입, 삭제가 제한될 수 있다.
    예시) 집계 함수를 사용한 뷰는 일반적으로 데이터 업데이트가 불가능하다.

  1. 디버깅 및 문제 해결의 어려움
    뷰를 사용하면 기본 테이블에 대한 직접적인 접근이 제한되기 때문에 문제 발생 시 원인을 추적하고 디버깅하는 것이 더 복잡해질 수 있다.
    예시) 뷰를 통해 데이터를 조회할 때 예상치 못한 결과가 나오면, 뷰 정의와 기본 테이블 구조를 모두 살펴봐야 문제를 해결할 수 있다.

뷰의 정의

  • 직원(EMPLOYEE) 테이블에서 급여(SALARY) 정보를 제외하고 판매 부서 직원의 이름(NAME)과 부서(DEPT)만 표시하는 뷰
CREATE VIEW EMPLOYEE_VIEW AS
SELECT EMPLOYEE_ID, NAME, DEPT
FROM EMPLOYEES;
WHERE DEPT = 'SALES'
WITH CHECK OPTION;
  • 주문(ORDER) 테이블에서 월별 매출 데이터를 집계하는 뷰
CREATE VIEW MONTHLY_SALES AS
SELECT YEAR(ORDER_DATE) AS YEAR, MONTH(ORDER_DATE) AS Month, SUM(TOTAL_AMOUNT) AS TOTAL_SALES
FROM ORDERS
GROUP BY YEAR(ORDER_DATE), MONTH(ORDER_DATE);

뷰의 갱신

일부 경우를 제외하고는 일반적으로 뷰 릴레이션에 대한 변경은 허용되지 않는다.

갱신이 불가능한 뷰

  • 한 릴레이션 위에서 정의되었으나 그 릴레이션의 기본키가 포함되지 않은 뷰
  • 기본 릴레이션의 애트리뷰트들 중에서 뷰에 포함되지 않은 애트리뷰트에 대해 NOT NULL이 지정되어 있는 경우
  • 집계 함수(SUM,AVG,MIN, MAX, COUNT 등)가 포함된 뷰
  • 조인으로 정의된 뷰

실체화 뷰

실체화 뷰(Materialized View)는 일반 뷰와 달리 뷰의 결과를 물리적으로 저장하는 뷰이다. 스냅샷(snapshot)이라고도 한다.

즉, 실체화 뷰는 뷰의 결과를 데이터베이스에 테이블 형태로 저장하여 성능을 향상시킨다. 일반 뷰는 참조할 때마다 쿼리가 실행되지만, 실체화 뷰는 저장된 결과를 참조하므로 조회 속도가 빠르다.

실체화 뷰의 특징

  1. 성능 향상
    자주 참조되는 복잡한 쿼리 결과를 미리 계산하여 저장하므로, 조회 시 성능이 크게 향상된다.

  2. 데이터 일관성
    데이터가 변경되면 실체화 뷰를 갱신해야 하므로, 갱신 주기를 설정하여 데이터 일관성을 유지할 수 있다.

  3. 관리
    실체화 뷰는 저장된 데이터를 주기적으로 갱신해야 하므로, 관리가 필요하다.
    ex) 트리거나 프로시저를 사용하여 주기적으로 갱신

실체화 뷰의 정의

  • 판매 데이터를 요약하는 실체화 뷰
CREATE MATERIALIZED VIEW SALES_SUMMARY AS
SELECT SALES_EMPLOYEE_ID, SUM(SALES_AMOUNT) AS TOTAL_SALES
FROM SALES
GROUP BY SALES_EMPLOYEE_ID;

참고
데이터베이스론

profile
공부 기록

0개의 댓글