[TIL] 데이터베이스 - 뷰 (view)

yurinnn·2024년 2월 23일
0

Today I Learn

목록 보기
8/11

DB에서 뷰는 하나 또는 그 이상의 테이블을 조인하여 만든 새로운 가상 테이블을 의미한다.

  • 실제로 테이블을 생성한 건 아니지만, 사용자에게는 실존 테이블과 동일하게 사용된다. (뷰를 가지고 새로운 뷰를 만들 수도 있다.)
  • 이는 주로 특정 정보만 제공하고 싶은 경우나 복잡한 쿼리를 가상 테이블로 만들어 간편하게 활용할 수 있어 업무에서도 자주 이용하는 기능이다.

EX) 두 개의 테이블이 있다고 가정하자 (member, Payment) 개발자가 회원 별 결제 이력을 조회하고 싶은데, 회사에서 규정상 민감한 개인정보는 제공하고 싶지 않은 경우 뷰를 만들어서 제공하면 된다. 테이블 member 에 있는 민감한 개인정보가 담긴 컬럼을 제외하고 Payment 에서도 카드 번호를 제외한 컬럼만 조인해서 뷰를 만들고 개발자에겐 해당 뷰를 접근시키면 된다.

📍 뷰 생성

뷰는 정말 간단하게 생성할 수 있다. 아래와 같이 일반 SELECT 쿼리 위에 CREATE VIEW '신규 뷰 명' AS 문구만 추가하면 된다. SELECT 쿼리에는 기존 뷰 또는 테이블을 조회해 주면 되는데, 개수는 하나부터 사용 가능하다. 즉, 단일 테이블 또는 조인한 형태 모두 가능하다.

CREATE VIEW viewTableEx1 AS (  
	SELECT CustomerID, OrderID, Quantity   
	FROM Orders   
	WHERE ProductID = "P1" 
); 

-- 2개 이상의 테이블을 조인할 경우 
CREATE VIEW viewTableEx2 AS ( 
	SELECT Customer.CustomerName, Orders.Quantity  
	FROM Customer JOIN Orders    
	ON Customer.CustomerID = Orders.CustomerID 
);

업무를 하다 보면 수많은 테이블을 조인하고, 쿼리만 100 줄이 넘어가는 경우도 적지 않기에 뷰를 미리 구성해 놓는다면 매우 편리하게 조회할 수 있다.

뷰를 읽기 전용으로 만들고 싶은 경우 쿼리 마지막에 'with ready only' 만 추가해주면 된다.
그러면 DML(INSERT, UPDATE, DELETE)은 사용할 수 없기에 외부에 제공할 때 사용하기 좋은 옵션이다.

📍 뷰 삭제

DROP VIEW viewTableEx2;

📍 뷰 조회

SELECT CustomerID, OrderID, Quantity  
	FROM viewTableEx WHERE CustomerID = "Cus1190";

📍 장점

  1. 데이터 조회가 용이하다. (복잡한 쿼리를 단순화)
  2. 사용자 별로 필요한 정보만 제공할 수 있다. (보안 이점)
  3. 물리적인 공간이 필요하지 않다.

📍 단점

  1. 뷰에 인덱스를 구성할 수 없다.
  2. 뷰를 포함하여 뷰를 만든 경우 연관 뷰를 삭제하면 생성된 뷰도 삭제된다.
  3. 한번 정의된 뷰는 수정이 불가하다. (alter로 정의 변경 불가능)
profile
슬기로운 개발 생활

0개의 댓글

관련 채용 정보