728x90
반응형
뷰(View)

 

  • 뷰는 논리테이블로서 사용자에게(생성 관점 아닌 사용 관점에서) 테이블과 동일하다.
  • 뷰는 '테이블 A'와 같은 하나의 물리 테이블로부터 생성 가능하며 다수의 테이블 또는 다른 뷰를 이용해 만들 수 있다.
  • 뷰와 같은 결과를 만들기 위해 조인 기능을 활용할 수 있으나, 뷰가 만들어져 있다면 사용자는 조인 없이 하나의 테이블을 대상으로 하는 단순한 질의어를 사용할 수 있다.
  • 사용자에게 접근이 허용된 데이터만 제한적으로 제공
  • 하나 이상의 질의 실행시 정의된 테이블로 대체되어 실행
  • 임시 작업을 위한 용도도 활용되고 사용상의 편의성을 최대화함

 

- 뷰의 특징

  • 테이블에서 유도되었기 때문에 구조가 같다.
  • 가상 테이블이라 물리적으로 구현되지 않는다.
  • 데이터의 논리적 독립성 제공
  • 뷰로 필요한 데이터만 처리하므로 관리가 용이하다.
  • 여러 테이블을 조인하여 뷰 생성 가능
  • 뷰에 나타나지 않은 데이터를 안전하게 보호 (사용자별로 접근 권한 설정)
  • 테이블의 기본키를 포함하여 뷰를 구성하면 삽입, 삭제, 갱신 가능

 

- 뷰의 장단점

구분 장단점 설명
장점 논리적 독립성 제공 - 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터에 접근 가능하다.
데이터 조작 연산 간소화 - 애플리케이션이 원하는 형태의 논리적 구조를 형성하여 데이터 조작 연산 간소화
보안 기능(접근제어) 제공 - 특정 필드만을 선택하여 뷰를 생성할 경우 애플리케이션은 선택되지 않은
필드의 조회 및 접근이 불가하다.
- 중요 보안 데이터를 저장 중인 테이블이나 컬럼에는 접근 불허
단점 뷰 자체 인덱스 불가 - 인덱스는 물리적으로 저장된 데이터를 대상으로 하기 때문에 논리적 구성인 뷰 자체는 인덱스를 가지지 못한다.
뷰 변경 불가 - 뷰 정의를 변경하려면 뷰를 삭제하고 재생성해야 한다.
- 뷰 정의는 ALTER 문을 이용하여 변경할 수 없다.
(뷰는 CREATE 문을 사용하여 정의하고, 제거할 때는 DROP문을 사용한다)
데이터 변경 제약 존재 - 뷰의 내용에 대한 삽입, 삭제, 변경 제약이 있다

 

- 뷰의 종류

  • 단순 뷰(Simple View): 하나의 테이블에서 뷰 생성
  • 복합 뷰(Complex View): 두개 이상의 테이블을 JOIN하여 뷰 생성
  • 인라인 뷰(Inline View): SELECT문의 FROM절에 기술된 SELECT 문(중첩)

 

- 뷰 예제

SELECT *
FROM emp_details_view;

* 이와 같이 여러 테이블을 JOIN 한 결과를 확인할 수 있음

 

SELECT first_name, last_name, salary, department_name, job_title
FROM emp_details_view;

* View 내에서 SELECT 질의문을 통해 필요한 부분을 추출할 수 있는 장점이 있음


- 뷰 생성 및 변경 (CREATE OR REPLACE VIEW)

 

  • 뷰 일반 생성
CREATE OR REPLACE VIEW 뷰이름
AS
    SELECT 질의

 

SELECT *
FROM employees;
CREATE OR REPLACE VIEW emp_view
AS
    SELECT employee_id, first_name, last_name, email
    FROM employees;
    
--    View EMP_VIEW이(가) 생성되었습니다.

 

-- 조건절 WHERE 활용 뷰 생성

CREATE OR REPLACE VIEW new_employee_view
AS
    SELECT employee_id, first_name, last_name,
           email, hire_date, job_id
    FROM employees
    WHERE employee_id > 206;
SELECT *
FROM new_employee_view;

INSERT INTO new_employee_view
VALUES(207, 'Minkyu', 'Cheon', 'jake', '23/03/06', 'IT_PROG');

 

-- View Table 내 Tuple 삭제

DELETE new_employee_view
WHERE employee_id = 207;
SELECT *
FROM new_employee_view;

  • 읽기 전용 뷰 생성
CREATE OR REPLACE VIEW 뷰이름
AS
    SELECT 질의
    WITH READ ONLY;

 

CREATE OR REPLACE VIEW salary_order_view
AS
    SELECT first_name, last_name, job_id, salary
    FROM employees
    ORDER BY salary DESC
    WITH READ ONLY;
SELECT *
FROM salary_order_view;

 

INSERT INTO salary_order_view
VALUES('Minkyu', 'Cheon', 'IT_PROG', 10000);

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO salary_order_view
--VALUES('Minkyu', 'Cheon', 'IT_PROG', 10000)
--오류 발생 명령행: 1 열: 1
--오류 보고 -
--SQL 오류: ORA-42399: 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다.
--42399.0000 - "cannot perform a DML operation on a read-only view"

 

CREATE OR REPLACE VIEW job_salary_view
AS
    SELECT job_id, AVG(salary) avg_salary,
           MIN(salary) min_salary, MAX(salary) max_salary
    FROM employees
    GROUP BY job_id
    ORDER BY AVG(salary)
    WITH READ ONLY;
SELECT *
FROM job_salary_view;


- 뷰 제거 (DROP VIEW)

 

DROP VIEW emp_view;
-- View EMP_VIEW이(가) 삭제되었습니다.
DROP VIEW new_employee_view;
-- View NEW_EMPLOYEE_VIEW이(가) 삭제되었습니다.
DROP VIEW salary_order_view;
-- View SALARY_ORDER_VIEW이(가) 삭제되었습니다.
DROP VIEW job_salary_view;
-- View JOB_SALARY_VIEW이(가) 삭제되었습니다.

 

728x90
반응형

'Language > RDBMS' 카테고리의 다른 글

데이터 모델링의 이해  (0) 2023.03.07
인덱스(Index)  (0) 2023.03.07
[DDL] 명령어를 활용한 테이블 정의  (0) 2023.03.04
트랜잭션 및 병행(동시성) 제어  (0) 2023.03.04
데이터 무결성과 제약 조건  (0) 2023.03.03

+ Recent posts