뷰와 시스템 카탈로그
1. 개요
뷰
- 원본 릴레이션에서 유도된 릴레이션으로써 외부 뷰와 다름
- 보안, 복잡한 질의를 단순화, 데이터 독립성을 위해 사용
시스템 카탈로그
- DB의 여러가지 다양한 객체의 정보를 가짐
- 시스템 카탈로그를 통해 원하는 릴레이션을 DB에서 찾고, 그 릴레이션에 어떤 애트리뷰트들이 있는지, 데이터 타입은 무엇인지 쉽게 파악 가능
2. 뷰
- 외부 뷰: ANSI/SPARC 3단계 아키텍처에서 사용자가 보는 DB의 구조
- 외부 뷰와는 다르게 여기서 뷰는 관계 DB에서 한 사용자의 외부 뷰가 아닌, 기존의 원본 릴레이션에 대한 SELECT문으로 선택한 유도된 릴레이션을 의미
- 즉, 뷰는 조회만 가능한 외부 뷰 + 데이터 검색, 갱신까지 가능
뷰의 정의
CREATE VIEW 뷰이름 [(애트리뷰트(들))]
AS SELECT문
[WITH CHECK OPTION];
위 예문은 부서번호가 3인 사원의 (사원번호, 사원이름, 직급)을 나타내는 뷰를 정의
위의 릴레이션 상황에서 EMP_DNO3의 뷰는 파란색 부분을 뜻함
뷰의 질의연산
- 기존의 ANSI/SPARC 3단계에 해당하는 외부 뷰는 조회 기능만 제공
- 그러나, 뷰 또한 유도된 릴레이션이므로 질의 처리가 가능
뷰의 장점
-
데이터 무결성 보장
뷰를 통해 투플 추가 및 수정 시 뷰의 SELECT문의 조건과 맞지 않으면 거절
대신 WITH CHECK OPTION이 있어야함
위의 구문은 SELECT문에서 WHERE DNO = 3과 맞지 않으므로 거절
-
데이터 독립성 제공
릴레이션의 애트리뷰트들이 바뀌어도 기존 질의를 바꾸는 번거로움을 줄임
-
데이터 보안기능 제공
원본 릴레이션에 접근하지 않고 뷰의 유도된 릴레이션으로 접근시킴으로써 보안 메커니즘으로 작동
-
동일 데이터에 대한 여러가지 뷰로 제공
원본 릴레이션은 모든 것을 다 보여주지만, 뷰를 통해 다르게 보여줄 수 있음
뷰의 갱신
뷰에 대한 갱신도 원본 릴레이션에 영향을 미침


갱신이 불가능한 뷰
- 원본 릴레이션의 기본키가 포함되지 않은 뷰
- 뷰가 가지지 않은 애트리뷰트가 원본 릴레이션에선 NOT NULL일 때
- 집단 함수가 포함된 뷰
- 조인으로 정의된 뷰
3. 시스템 카탈로그
- 시스템내의 객체(기본 릴레이션, 뷰, 인덱스, 사용자, 접근 권한 등)의 모든 테이터를 포함
- 이런 데이터를 메타 데이터라고 부름
- 표준화되어있지 않아서, DBMS마다 서로 다른 시스템 카탈로그로 제공
- 데이터 사전또는 시스템 테이블이라고 부름
질의 처리 활용과 질의 최적화
SELECT EMPNAME, SALARY, SALARY * 1.1
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO = 2;
- SELECT구문 전체가 문법적으로 올바른지 확인
- EMPLOYEE 릴레이션이 DB에 존재하는지 확인
- SELECT절과 WHERE절의 애트리뷰트가 릴레이션에 존재하는지 확인
- SALARY와 DNO가 숫자연산에 붙었으므로 정수형이고, TITLE이 문자열과 비교되므로 CHAR형인지 확인
- 사용자가 EMPNAME, SALARY의 검색 권한이 있는지 확인
- WHERE절의 애트리뷰트인 TITLE, DNO가 인덱스로 정의되어 있는지 확인
- 인덱스가 존재한다면, 어느 인덱스로 조회하는 것이 빠른지 선택(최적화)
시스템 카탈로그의 예
- SYS_RELATION: DB안에서 릴레이션들 목록과 그 릴레이션이 몇개의 튜플, 애트리뷰트를 가졌는지, 한 튜플의 크기는 얼만지 등을 저장
- SYS_ATTIBUTE: 애트리뷰트들의 목록과 그 애트리뷰트가 어느 릴레이션에 속했는지, 타입은 뭔지 등을 저장

시스템 카탈로그의 갱신
- 시스템 카탈로그는 갱신이 불가능
- DELETE, UPDATE 또는 INSERT 자체가 불가능
KIM이 EMPLOYEE의 MANAGER 애트리뷰트를 지우기 위해
ALTER TABLE EMPLOYEE DROP COLUMN MANAGER; > 가능
DELETE FROM SYS_ATTRIBUTE
WHERE AttRelId= 'EMPLOYEE' AND AttName= 'MANAGER'; > 거절