반응형
데이터베이스에서는 모든 유저가 아무 데이터나 접근하게 허락하는 것은 좋은 구조가 아닙니다
기밀내용이 있을 수도 있거나
단순하게 일반 유저들에게 너무 데이터가 많아 복잡할 수도 있습니다
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은 실제로 삽입되어도 뷰에서는 보이지가 않습니다
반응형
'컴퓨터공학 > 데이터베이스 DB' 카테고리의 다른 글
데이터베이스 제약조건 Integrity Constraints (0) | 2024.12.26 |
---|---|
전공생의 데이터베이스 수업 수강 전 SQLD 합격 후기 (5) | 2024.11.07 |
Correlated Subquery 상관 서브쿼리 (2) | 2024.10.22 |
SQL 서브쿼리 Subquery (1) | 2024.10.21 |
외부 조인과 내부 조인 Inner Join and Outer Join (2) | 2024.10.20 |