- 데이터베이스 이론에서 특정 쿼리에 대한 결과로 구성된 가상의 또는 논리적 테이블. 뷰는 데이터베이스에서 계산 또는 취합된 데이터로 이루어진 가상 테이블이며, 테이블 안의 데이터가 변경되었을 경우 뷰에서 보여주는 데이터 역시 변경된다.
- 특정 테이블에 담긴 데이터의 부분집합이 될 수 있다.
- 다수의 테이블을 join하고 단순화하여 단일 가상 테이블로 변경한다.
- 뷰는 집계(sum, average 등) 데이터로 이루어진 집계 테이블로도 동작 가능하다.
- 뷰는 데이터의 복잡성을 은닉한다.
- 뷰는 storage에 대한 추가 오버해드를 발생시키지 않는다.
- SQL 엔진 종류에 따라 부가적인 보안을 제공하기도 한다.
- 테이블이 외부 세계에 노출됨을 제한하거나 방지한다.
프로그래밍에서 함수가 추상화를 제공하는 것처럼, 뷰 역시 추상물을 생성하는 데 사용할 수 있다. 또한 함수 처럼 뷰는 중첩(nesting)이 가능하여 하나의 뷰가 또다른 뷰로부터 데이터를 집계할 수 있다. 이러한 뷰의 기능이 없다면 데이터베이스는 제 2 정규형 이상으로 정규화하기가 매우 힘들 것이다. 또한 뷰를 통해 무손실 조인 분리(join decomposition)를 더욱 쉽게 이룰 수 있다.
Read-only 뷰 vs updatable 뷰뷰는 읽기 전용 혹은 갱신가능 뷰로 나뉜다. DBMS가 뷰 스키마(view schema)에서 기반 테이블(underlying base table)로 역사상(reverse mapping)이 가능하다면, 해당 뷰는 갱신가능 뷰이며INSERT, UPDATE, DELETE 연산이 갱신 가능 뷰에서 수행될 수 있다.
읽기 전용 뷰의 경우 이러한 연산을 지원하지 않는데, 이는 역사상을 지원하지 않기 때문이다.
뷰의 예뷰는 뷰 자신의 원 쿼리와 동등(equivalent)하다. accounts_view란 이름의 뷰가 있고 그 내용이 다음과 같을 때,
accounts view:
-------------
SELECT name,
money_received,
money_sent,
(money_received - money_sent) AS balance,
address,
...
FROM table_customers c
JOIN accounts_table a
ON a.customerid = c.customer_id
애플리케이션은 단순히 다음과 같이 쿼리를 던져 동일한 결과를 얻을 수 있다.
SELECT name,
balance
FROM accounts_view
RDMBS는 위의 쿼리를 아래와 같이 동일 뷰(equivalent view)로 교체한 후 이를 옵티마이저에게 보낸다.
SELECT name,
balance
FROM (SELECT name,
money_received,
money_sent,
(money_received - money_sent) AS balance,
address,
...
FROM table_customers c JOIN accounts_table a
ON a.customerid = c.customer_id )
이 시점에서 옵티마이저는 쿼리를 받아 불필요한 복잡성을 제거한 후(위의 경우 address를 읽을 필요가 없다), 처리를 위해 최적화된 쿼리를 SQL 엔진으로 보낸다.
댓글을 달아 주세요