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 |