728x90
반응형
경희대학교 이영구 교수님의 데이터베이스 강의를 기반으로 정리한 글입니다.
뷰
- 다른 릴레이션으로부터 유도된 릴레이션(derived relation)으로서 ANSI/SPARC 3단계 아키텍처의 외부 뷰와 다름
- 데이터베이스의 보안 메커니즘
- 복잡한 질의를 간단하게 표현하는 수단
- 데이터 독립성을 높이기 위해
시스템 카탈로그
- 시스템 내의 객체(기본 릴레이션, 뷰, 인덱스, 사용자, 접근 권한 등)에 관한 정보를 포함
- 적절히 활용하여 원하는 릴레이션을 데이터베이스에서 탐색 → 애트리뷰트 정보 쉽게 파악
8.1 뷰
뷰의 개요
- ANSI/SPARC 3단계 아키텍처에서 외부 뷰는 특정 사용자가 보는 데이터베이스의 구조
- 한 사용자의 전체 외부 뷰 대신 하나의 가상 릴레이션(virtual relation) 의미
- 기존의 기본 릴레이션(base relation)에 대한 SELECT문의 형태로 정의
- 사용자는 여러 개의 릴레이션과 뷰를 사용 가능
- 릴레이션으로부터 데이터를 검색하거나 갱신할 수 있는 동적인 창(dynamic window)의 역할
스냅샷(snapshot)
- 어느 시점에 SELECT문의 결과를 기본 릴레이션의 형태로 저장해 놓은 것
- 사진을 찍은 것과 같아서 스냅샷을 정의하는 시점의 기본 릴레이션의 내용이 반영
- 어떤 시점의 조직체의 현황 → ex. 몇년 몇월에 근무하던 사원 정보, 재고 정보 등

뷰의 정의
- 뷰를 정의하는 SQL문

- 뷰의 이름 다음에 애트리뷰트 생략 → SELECT절에 열거된 애트리뷰트 이름과 동일
- SELECT절에 산술식 또는 집단 함수 사용 → 조인 포함 → 애트리뷰트 이름이 같은 경우 → 모든 애트리뷰트 이름 지정 필수



뷰를 사용하여 데이터를 접근할 때 관계 DBMS에서 거치는 과정
- 시스템 카탈로그로부터 뷰의 정의(SELECT문) 검색
- 기본 릴레이션에 대한 뷰의 접근 권한 검사
- 뷰에 대한 질의를 기본 릴레이션에 대한 동등한 질의로 변환

뷰의 장점
복잡한 질의를 간단하게 표현
- 기획부에 근무하는 사원들 중 직책이 부장인 사원의 이름과 급여를 검색하는 질의 → 기본 릴레이션을 사용하여 표현하면 복잡한 형태의 질의

- 뷰에 대해 같은 결과를 검색하는 질의 표현

데이터 무결성을 보장
- 기본적으로 뷰를 통해 투플을 추가하거나 수정할 때 투플이 뷰를 정의하는 SELECT문의 WHERE절의 기준에 맞지 않으면 뷰의 내용에서 사라짐

- 이 뷰를 정의할 때 WITH CHECK OPTION을 명시했다고 가정

데이터 독립성 제공
- DB 구조가 바뀌어도 기존 질의(응용 프로그램)를 다시 작성할 필요성을 줄이는데 사용
- ex. 기존 EMPLOYEE 릴레이션이 EMP1(EMPNO, EMPNAME, SALARY)과 EMP2(EMPNO, TITLE, MANAGER, DNO)로 분해 → 기존 EMPLOYEE 릴레이션을 접근하던 SELECT문은 더 이상 수행X → EMP1과 EMP2에 대한 SELECT문으로 변경

- 뷰를 정의하면 기존 SELECT문이 계속해서 수행될 수 있음
데이터 보안 기능 제공
- 뷰의 원본이 되는 기본 릴레이션에 직접 접근할 수 있는 권한 부여 X → 뷰를 통해 데이터를 접근하도록 → 보안 메커니즘으로 사용
- 뷰는 일반적으로 기본 릴레이션의 일부 애트리뷰트들 또는 일부 투플들을 검색하는 SELECT문으로 정의됨 → 뷰를 통해 기본 릴레이션을 접근하면 기본 릴레이션의 일부만 검색 가능
- ex. EMPLOYEE 릴레이션의 SALARY 애트리뷰트를 제외하고 뷰를 정의하면 SALARY 정보를 숨길 수 있음
동일한 데이터에 대한 여러 가지 뷰 제공
- 사용자들의 그룹이 각자 특정한 기준에 따라 데이터를 접근하도록 함
뷰의 갱신
- 뷰에 대한 갱신도 기본 릴레이션에 대한 갱신으로 변환됨
갱신 1: 한 릴레이션 위에서 정의된 뷰에 대한 갱신

갱신 2: 두 개의 릴레이션 위에서 정의된 뷰에 대한 갱신

갱신 3: 집단 함수 등을 포함한 뷰에 대한 갱신

갱신이 불가능한 뷰
- 한 릴레이션 위에서 정의되었으나 그 릴레이션의 기본 키가 포함되지 않은 뷰
- 기본 릴레이션의 애트리뷰트들 중에서 뷰에 포함되지 않은 애트리뷰트에 대해 NOT NULL이 지정되어 있을 때
- 집단 함수가 포함된 뷰
- 조인으로 정의된 뷰

8.2 관계 DBMS의 시스템 카탈로그
시스템 카탈로그
- 데이터베이스의 객체(사용자, 릴레이션, 뷰, 인덱스, 권한 등)와 구조들에 관한 모든 데이터를 포함
- 시스템 카탈로그를 메타데이터라고 함 → 메타데이터: 데이터에 관한 데이터
- 사용자 및 질의 최적화 모듈 등 DBMS 자신의 구성요소에 의해서 사용됨
- 관계 DBMS마다 표준화되어 있지 않아서 관계 DBMS마다 서로 다른 형태로 기능 제공
- 데이터 사전(data dictionary) 또는 시스템 테이블이라고도 부름
시스템 카탈로그가 질의 처리에 어떻게 활용되는가

- SELECT문이 문법적으로 정확한가 검사
- SELECT문에서 참조하는 EMPLOYEE 릴레이션이 데이터베이스에 존재하는가 검사
- EMPLOYEE 릴레이션에 SELECT절에 열거된 애트리뷰트와 WHERE절에서 조건에 사용된 애트리뷰트가 존재하는가 확인
- SALARY가 수식에 사용 → 데이터 타입이 숫자형인가 검사
- TITLE이 문자열과 비교 → 데이터 타입이 문자형인가 검사
- 질의 입력 사용자가 EMPLOYEE 릴레이션의 EMPNAME, SALARY를 검색할 수 있는 권한이 있는가 확인
- TITLE, DNO에 인덱스가 정의되어 있는지 확인
- 각각 인덱스 존재 → DBMS가 두 인덱스 중에서 조건을 만족하는 투플 수가 적은 것을 선택하기 위해 관계 데이터베이스 시스템에 데이터베이스 외에 추가로 정보를 유지해야 함
- 한 릴레이션의 전체 투플 수와 그 릴레이션에 정의된 각 인덱스에 존재하는 상이한 값들의 개수를 유지하면 어느 인덱스를 사용하는 것이 유리한가 예상 가능
- EMPLOYEE 릴레이션 전체 투플 수 7, TITLE 애트리뷰트에는 사원, 대리, 과장, 부장, 사장 존재
- DNO 애트리뷰트에는 1, 2, 3 존재
- 따라서 TITLE에 정의된 인덱스가 DNO에 정의된 인덱스보다 대상 투플들을 더 좁혀주므로 유리
질의 최적화
- DBMS가 질의를 수행하는 여러 방법 중 가장 비용이 적게 드는 방법을 찾는 과정
- 질의 최적화 모듈이 정확한 결정을 내릴 수 있도록 DBMS는 자체 목적을 위해 시스템 카탈로그에 다양한 정보 유지
관계 DBMS의 시스템 카탈로그
- 사용자 릴레이션에 적용되는 회복 기법과 동시성 제어 기법을 동일하게 사용 가능
- SELECT문을 사용하여 내용 검색 가능
- 릴레이션, 애트리뷰트, 인덱스, 사용자, 권한 등 각 유형마다 별도의 릴레이션 유지

시스템 카탈로그의 갱신
- 어떤 사용자도 시스템 카탈로그를 직접 갱신 불가능 → DELETE, UPDATE, INSERT 사용해서 변경 불가능
- EMPLOYEE 릴레이션의 소유자인 KIM이 EMPLOYEE 릴레이션에서 MANAGER 애트리뷰트를 삭제

- 대신 시스템 카탈로그에 대해 사용하면 DBMS가 거절

시스템 카탈로그에 유지되는 통계 정보
릴레이션마다
- 투플의 크기
- 투플 수
- 각 블록의 채우기 비율
- 블록킹 인수
- 릴레이션의 크기(블록 수)
뷰마다
- 뷰의 이름
- 뷰의 정의
애트리뷰트마다
- 애트리뷰트의 데이터 타입과 크기
- 애트리뷰트 내의 상이한 값들의 수
- 애트리뷰트 값의 범위
- 선택율(조건을 만족하는 투플 수/전체 투플 수)
사용자마다
- 접근할 수 있는 릴레이션
- 권한
인덱스마다
- 인덱스된 애트리뷰트(키 애트리뷰트 또는 비 키 애트리뷰트)
- 클러스터링 인덱스/비 클러스터링 인덱스 여부
- 밀집/희소 인덱스 여부
- 인덱스의 높이
- 1단계 인덱스의 블록 수
8.3 오라클의 시스템 카탈로그
- 시스템 카탈로그를 데이터 사전(data dictionary)이라고 부름
- 시스템 테이블스페이스에 저장됨
- 기본 테이블과 데이터 사전 뷰로 구성됨
- 기본 테이블의 정보가 암호화된 형태로 저장 → 사용자가 직접 접근할 필요 거의 X → 일반적으로 이해하기 쉬운 형식의 정보를 제공하는 데이터 사전 뷰를 접근
데이터 사전 뷰의 세 부류
DBA_xxx 뷰
- 데이터베이스 내의 모든 객체들에 관한 정보
ALL_xxx 뷰
- 현재의 사용자가 접근할 수 있는 객체들에 관한 정보
USER_xxx 뷰
- 현재의 사용자가 소유하고 있는 객체들에 관한 정보


- 사용자 KIM이 소유한 테이블이나 뷰에 관한 정보를 검색하기 위해서 KIM으로 Oracle SQL Developer에 로그인을 한 후 다음과 같은 질의 수행

- OWNER는 사용자의 이름, TABLE_NAME은 테이블이나 뷰의 이름, TABLE_TYPE은 테이블의 유형(테이블, 뷰)
728x90
반응형
'Computer Science > Database' 카테고리의 다른 글
| [데이터베이스] 10장. 데이터베이스 보안과 권한 관리 (0) | 2026.02.12 |
|---|---|
| [데이터베이스] 9장. 트랜잭션 (0) | 2026.02.12 |
| [데이터베이스] 7장. 릴레이션 정규화 (0) | 2026.02.11 |
| [데이터베이스] 6장. 물리적 데이터베이스 설계 (0) | 2026.02.11 |
| [데이터베이스] 5장. 데이터베이스 설계와 ER 모델 (0) | 2026.02.11 |