데이터베이스 8 뷰와 시스템 카탈로그

milkbottle·2022년 11월 29일
0

DB

목록 보기
9/13

뷰와 시스템 카탈로그

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;

  1. SELECT구문 전체가 문법적으로 올바른지 확인
  2. EMPLOYEE 릴레이션이 DB에 존재하는지 확인
  3. SELECT절과 WHERE절의 애트리뷰트가 릴레이션에 존재하는지 확인
  4. SALARY와 DNO가 숫자연산에 붙었으므로 정수형이고, TITLE이 문자열과 비교되므로 CHAR형인지 확인
  5. 사용자가 EMPNAME, SALARY의 검색 권한이 있는지 확인
  6. WHERE절의 애트리뷰트인 TITLE, DNO가 인덱스로 정의되어 있는지 확인
  7. 인덱스가 존재한다면, 어느 인덱스로 조회하는 것이 빠른지 선택(최적화)

    시스템 카탈로그의 예

    • 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'; > 거절

0개의 댓글

관련 채용 정보