T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/데이터베이스 DB

데이터베이스 뷰 View

Tonny Kang 2024. 12. 25. 07:44
반응형

데이터베이스에서는 모든 유저가 아무 데이터나 접근하게 허락하는 것은 좋은 구조가 아닙니다

기밀내용이 있을 수도 있거나

단순하게 일반 유저들에게 너무 데이터가 많아 복잡할 수도 있습니다

728x90

그래서 예를들어

 

누군가 강사의 성함이랑 부서를 알고싶어하지만

굳이 강사의 급여를 공개할 필요가 없을 때 에는

아래처럼 SELECT문을 사용하면 되는데

Select id, name, dept_name
from instructor;

-> 실제 테이블 (relation)이 아닌 가상의 relation은 view라고 합니다

 

하지만 실제로 View를 어떻게 정의하는지 알아볼까요

CREATE VIEW V AS <Query Expression>

 

이 형식의 SQL로 하면되는데 위의 시나리오 같은 경우 어떻게 되는지 봅시다

create view faculty as
select id, name, dept_name
from instructor;

 

그리고 이렇게 생성된 View를 활용하기 위해서는

select name
from faculty
where dept_name = 'Biology'

 

이렇게 하면됩니다

 

심지어 다른 View를 활용해 또 다른 View를 생성해도 됩니다

create view faculty as
select id, name, dept_name
from faculty
where dept_name = 'CS';
반응형

View에서의 DML


가끔 특정 Update들은 데이터베이스를 위반하는 Update들 일수도 있습니다

 

예를 들어

create view instructor_info as
select ID, name, building
from instructor i, department d
where i.dept_name = d.dept_name;

 

이런 뷰에 아래와 같은 Insertion을 시도한다 하면

insert into instruction_info
values ('69987', 'White', 'Taylor');

 

새로 insert되는 tuple은 위 view의 where문 조건에 부합하지 않을 수 있습니다

그래서 대부분에 DBMS들에는 허락되지 않습니다

 

또 다른 예시로는

create view history_instructors as
select *
from instructor
where dept_name='History';

 

이런 뷰에 아래와 같은 insertion을 시도하면

insert into history_instructors
values ('25566', 'Brown', 'Biology', 1000000);

 

이건 WHERE문에 그냥 부합하지 않습니다

 

부서가 History 여야하는데 Biology죠?

그래서 이러한 Tuple은 실제로 삽입되어도 뷰에서는 보이지가 않습니다

반응형