NOW OR NEVER

[DataBase] View & Index 본문

Back-End/Database

[DataBase] View & Index

LAURA 2022. 4. 28. 12:37
반응형

View 뷰

  • 하나 이상의 테이블을 합하여 만든 가상의 테이블
  • 실제로 존재하지 않는 가상의 테이블( 실제로 존재하지 않는 select한 결과)
  • 자주 사용하는 복잡한 sql을 미리 뷰를 만들어 두어 편리하게 사용 가능
  • 기본문법 create view 뷰이름 [컬럼이름] as select 문
  • 요약 : 실제로 존재하지 않는 가상의 논리적인 테이블을 말하며 복잡한 sql을 미리 뷰를 만들어 둠으로써 쉽게 조회할 수 있고 사용자별 접근 제한을 위해 뷰를 사용한다.

뷰를 통한 추가, 수정, 삭제 가능

  • 뷰를 통한 레코드 추가
    • 뷰에 레코드 추가시 실제 레코드는 뷰를 만들 때 사용한 모테이블에 추가된다. 그렇기 때문에 뷰 생성시 사용한 컬럼 외의 칼럼들은 null을 허용하거나 default값이 설정되어 있어야 view를 통해 레코드를 추가 할 수 있다.
    • 뷰 생성시 조건에 맞지 않는 레코드 추가 가능. 단, 실제로는 모 테이블에만 추가되고 뷰의 조건에는 맞지 않아 뷰에는 나타나지 않는다.
  • 뷰를 통한 수정
    • 뷰를 통해 수정 가능
    • 뷰 생성시에 설정된 조건과 맞지 않는 값으로 수정이 가능하다. 단, 뷰의 조건과 맞지 않는 값으로 수정된 레코드는 뷰에 나타나지 않게 된다.
    • 실제 뷰 생성시 사용한 모테이블 수정 반영됨
  • 뷰를 통한 삭제
    • 삭제 가능
    • 실제 뷰 생성시 사용한 모테이블에서도 삭제됨

장점

  • 편리성 및 재사용성 : 자주 사용되는 복잡한 질의를 뷰로 미리 정의해놓을 수 있음 -> 복잡한 질의 간단 작성
  • 보안성

with check option

  • create view 뷰이름 as select문 조건식 with check option;
  • 뷰 생성시 사용한 조건식에 맞는 레코드만 추가, 수정 하도록 하기 위한 옵션
  • 뷰의 조건에 맞지 않는 레코드 추가, 수정 시 with check option의 조건에 위배 된다고 뜨며 추가, 수정 불가하다.

with read only

  • create view 뷰이름 as select문 조건식 with read only;
  • 조회만 가능한 뷰 생성
  • 추가, 수정 불가

시스템 뷰

  • oracle에서 제공하는 뷰
  • user_tables : 사용자가 만든 모든 테이블의 정보를 갖고있음
  • user_objects : 사용자가 만든 모든 객체 의 정보를 갖고있음
  • user_contraints: 사용자가 만든 모든 제약의 정보를 갖고있음
    • constraint_name: 제약명
    • constraint_type : 제약의 종류, C: chectk, R: 참조, P : Primary key
    • status : 제약의 상태, 때로는 제약을 비활성화 시킬 수 있다.
      • 제약 비활성화: alter table 테이블명 disable contraint 제약명;
      • 제약 활성화: alter table 테이블이름 enable constraint 제약명;

Index

  • 도서의 맨뒤에 색인표를 만들어 책 내용을 찾기 쉽도록 하는 것 처럼 테이블의 특정컬럼에 인덱스를 만들어 검색속도를 향상시킬 수 있다. - 책의 페이지수가 많을때에 색인표가 유용한 것 처럼 레코드의 수가 많을때에 인덱스가 유용하다. 만약, 책을 만들고 색인표 까지 만들었는데 책내용이 변경이 되었다면 색인표는 오히려 책 내용을 찾기가 어려워진다. 마찬가지로 인덱스를 만들어두고 레코드의 값의 변경이 있다면 오히려 인덱스가 성능저하의 원인이 된다.
  • 인덱스 생성: create index 인덱스이름 on 테이블(컬럼);
    • 테이블 생성 시 primary key로 설정한 컬럼은 자동으로 인덱스 생성
  • 인덱스 삭제 : drop index 인덱스이름
  • 생성한 인덱스는 user_objects의 object_name와 user_indexes의 index_name에 자동 저장된다.
Comments