Untitled

[관계형 데이터베이스] - 데이터베이스와 뷰 본문

데이터베이스

[관계형 데이터베이스] - 데이터베이스와 뷰

CHML 2016. 11. 13. 12:53
1. 뷰 (View)의 개념

뷰는 다른 테이블을 기반으로 만들어진 가상의 테이블을 의미한다. 뷰는 실제로 데이터를 저장하고 있지 않으며, 논리적으로만 존재한다. 그러나 데이터베이스 사용자는 실제로 데이터가 존재하는 테이블과 동일하게 뷰를 조작할 수 있다. SQL 기반의 데이터베이스에서는 뷰를 named table, derived table, virtual table이라고 말하기도 한다.

아래의 [그림 1]은 department 테이블에서 생성된 두 개의 뷰를 보여준다. 하나의 뷰는 공과대학에 소속된 학과만을 포함하고 있으며, 다른 하나의 뷰는 상경대학에 소속된 학과만을 포함하고 있다.


[그림 1] 뷰의 생성


데이터베이스 사용자는 [그림 1]과 같이 하나의 실제 데이터 (테이블)로부터 가상의 논리적 구조 (뷰)를 생성하여 조작할 수 있다. 뷰를 이용하면, 실제 데이터를 다수의 테이블에 분할하여 저장할 필요 없이 하나의 테이블에서 효율적으로 관리할 수 있으며, 이와 동시에 각각의 응용 프로그램이 원하는 서로 다른 논리적 구조 또한 손쉽게 제공할 수 있다.


2. 뷰의 필요성

DBMS의 가장 중요한 목적은 데이터의 저장 구조나 처리 방식이 변경되어도 응용 프로그램에 영향을 주지 않도록 하는 데이터 독립성의 구현이다. 데이터베이스에서 말하는 데이터 독립성에는 두 가지 종류가 있다.


  • 논리적 데이터 독립성 (logical data independence): 각각의 응용 프로그램들이 서로 영향을 받지 않으면서 응용 프로그램이 원하는 논리적 구조를 제공할 수 있는 능력
  • 물리적 데이터 독립성 (physical data independence): 응용 프로그램에 영향을 미치지 않고 데이터의 물리적 구조를 변경할 수 있는 능력

데이터베이스에서 뷰는 어떠한 테이블을 데이터베이스 사용자 또는 응용 프로그램이 원하는 형태로 취급하는 것을 가능하게 하기 때문에 논리적 데이터 독립성을 구현하기 위한 중요한 개념으로 이용되고 있다. 



3. 뷰의 장점

뷰는 단순히 각각의 사용자가 원하는 형태의 가상 테이블을 제공하는 것이지만, 데이터베이스에서 뷰를 이용하는 것은 다음과 같은 이점이 있다.


  • 논리적 데이터 독립성 제공: 뷰를 이용하면 다른 응용 프로그램이나 데이터베이스에 영향을 주지 않고, 응용 프로그램이 원하는 형태로 데이터에 접근할 수 있기 때문에 논리적 데이터 독립성을 구현할 수 있다.
  • 데이터 조작 연산의 간소화: 뷰를 이용하여 응용 프로그램이 원하는 형태의 논리적 구조를 형성하면, 데이터 조작 연산을 간소화할 수 있다. 예를 들어, 회원 테이블만 존재하는 데이터베이스에서 우수 회원 중에서 50세 이상 회원을 찾는다면, 회원 테이블에서 우수 회원을 추출하여 그 중에서 50세 이상인 회원을 검색해야 할 것이다. 그러나 우수 회원을 원소로 갖는 뷰를 생성해놓으면, 단순히 해당 뷰에서 50세 이상인 회원을 검색하기만 하면 된다.
  • 접근 제어를 통한 보안 기능 제공: 특정 필드만을 선택하여 뷰를 생성할 수 있기 때문에 응용 프로그램은 선택되지 않은 필드의 존재를 알 수 없으며, 접근 또한 할 수 없다. 따라서, 뷰를 이용하면 특정 데이터에 대한 접근 제어와 보안 기능을 제공할 수 있다.



4. 뷰에 대한 연산

뷰는 실제 데이터를 저장하고 있지 않는 가상의 테이블이지만, 검색, 삽입, 수정, 삭제 연산이 가능하다. 그러나 뷰는 테이블로부터 생성된 가상의 테이블이기 때문에 뷰에 대한 연산 시, 아래와 같은 제약 사항을 갖는다.


  • 뷰는 자신을 생성하기 위해 이용된 테이블의 기본 키를 포함하고 있어야 연산이 가능하다.
  • 뷰의 필드가 상수, 내장 함수, 연산식, GROUP BY 키워드로부터 유도되었다면, 해당 뷰는 연산이 불가능하다.
  • 다수의 테이블을 JOIN 하여 생성한 뷰는 연산이 불가능하다.
  • 연산을 적용할 수 없는 뷰에서 생성된 뷰 또한 연산이 불가능하다.




1 Comments
댓글쓰기 폼