SQL서버 SQL강좌: 7-5. 뷰 옵션

코난(김대우) 2023.08.18 16:44 Views : 36 Upvote:1

안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 7-5. 뷰 옵션을 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 뷰(VIEW) 옵션입니다. 

 

 

 

TL;DR

SCHEMABINDING(스키마 바인딩) 옵션으로 뷰와 테이블 간 무결성을 유지하는 방법을 다룹니다. 원본 테이블 스키마 변경 시 발생하는 영향과 SCHEMABINDING 옵션으로 테이블과 뷰 간의 의존성을 강화하는 방법을 진행합니다.



지난 7-2. 뷰 생성 강좌에서 암호화와 WITH CHECK 옵션을 이용해 뷰의 기능을 확장했습니다. 이번 강좌에서는 뷰의 SCHEMABINDING(스키마 바인딩)을 진행합니다.

 

 

뷰 SCHEMABINDING(스키마 바인딩)

뷰는 테이블의 거울입니다. 그렇다면, 뷰의 원본 테이블 스키마가 변경되면 뷰는 어떻게 될까요?

 

-- 테이블 조회
SELECT * FROM Employee;
GO

-- 뷰가 존재하면 삭제
IF OBJECT_ID(N'dbo.v_Employee', N'V') IS NOT NULL  
   DROP VIEW dbo.v_Employee;  
GO

-- v_Employee 뷰를 생성
CREATE VIEW v_Employee
AS
SELECT emp_num, emp_name, email FROM Employee;
GO

-- 뷰 조회
SELECT * FROM v_Employee;
GO

-- 테이블에서 email 컬럼을 삭제
ALTER TABLE Employee DROP COLUMN email;
GO

-- 뷰 조회  - 오류 발생
SELECT * FROM v_Employee;
GO

메시지 207, 수준 16, 상태 1, 프로시저 v_Employee, 줄 5 [배치 시작 줄 23]
Invalid column name 'email'.
메시지 4413, 수준 16, 상태 1, 줄 25
Could not use view or function 'v_Employee' because of binding errors.

 

뷰 바인딩 에러 메시지와 함께 오류가 발생합니다. 

 

SCHEMABINDING 쿼리

뷰가 참조하는 원본 테이블을 함부로 변경하지 못하게 SCHEMABINDING 옵션을 설정할 수 있습니다. 이 경우, 원본 테이블을 수정하려고 시도하면, 테이블을 참조하는 개체가 있으니 수정이 불가하다는 메시지가 발생합니다.

 

-- 테이블이 존재하면 삭제
IF OBJECT_ID(N'dbo.Employee', N'U') IS NOT NULL  
   DROP TABLE dbo.Employee;  
GO
-- 뷰가 존재하면 삭제
IF OBJECT_ID(N'dbo.v_Employee', N'V') IS NOT NULL  
   DROP VIEW dbo.v_Employee;  
GO

-- employee 테이블 생성
CREATE TABLE Employee (
  emp_num INT PRIMARY KEY,
  emp_login_pwd NVARCHAR(15),
  emp_name NVARCHAR(10),
  email NVARCHAR(15),
  emp_salary BIGINT
);
GO

-- employee 테이블에 예제 데이터 삽입
INSERT INTO Employee (emp_num, emp_login_pwd, emp_name, email, emp_salary)
VALUES
  (1, N'password1234', N'김대우',  N'kdw@example.com', 20000000),
  (2, N'password!@#$', N'손석구', N'ssk@example.com', 100000000),
  (3, N'asdfqwer!@#$', N'박은빈', N'peb@example.com', 120000000);
GO

-- v_Employee 뷰를 스키마 바인딩으로 생성
CREATE VIEW v_Employee
WITH SCHEMABINDING  -- 스키마 바인딩 설정
AS
SELECT emp_num, emp_name, email FROM dbo.Employee;  -- 스키마.테이블명으로 설정
GO

-- 원본 테이블에서 email 컬럼을 삭제 시도 - 오류 발생
ALTER TABLE Employee DROP COLUMN email;
GO

메시지 5074, 수준 16, 상태 1, 줄 65
The object 'v_Employee' is dependent on column 'email'.
메시지 4922, 수준 16, 상태 9, 줄 65
ALTER TABLE DROP COLUMN email failed because one or more objects access this column.

 

이렇게, SCHEMABINDING을 이용해 테이블과  뷰의 무결성을 유지할 수 있습니다.
 

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 32220
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 16374
2274 SQL강좌: 8-3. 저장 프로시저 - 매개변수(파라미터) 코난(김대우) 2023.08.18 69
2273 SQL강좌: 8-2. 저장 프로시저 - 생성과 실행 코난(김대우) 2023.08.18 65
2272 SQL강좌: 8-1. 저장 프로시저(Stored Procedure) - 소개 코난(김대우) 2023.08.18 75
2271 SQL강좌: 7-10. 실무에서 뷰 사용 코난(김대우) 2023.08.18 46
2270 SQL강좌: 7-9. 인덱싱된 뷰(Indexed View) file 코난(김대우) 2023.08.18 50
2269 SQL강좌: 7-8. 분할 뷰(Partitioned View) file 코난(김대우) 2023.08.18 44
2268 SQL강좌: 7-7. 뷰에서 데이터 수정 코난(김대우) 2023.08.18 44
2267 SQL강좌: 7-6. 뷰에서 뷰 생성 코난(김대우) 2023.08.18 53
» SQL강좌: 7-5. 뷰 옵션 코난(김대우) 2023.08.18 36
2265 SQL강좌: 7-4. 뷰 삭제 코난(김대우) 2023.08.18 29
2264 SQL강좌: 7-3. 뷰 수정 코난(김대우) 2023.08.18 50
2263 SQL강좌: 7-2. 뷰 생성 file 코난(김대우) 2023.08.18 44
2262 SQL강좌: 7-1. 뷰(VIEW) 소개 코난(김대우) 2023.08.18 74
2261 SQL강좌: 6-9. 데이터 무결성 - 데이터 무결성 주의사항 file 코난(김대우) 2023.08.18 54
2260 SQL강좌: 6-8. 데이터 무결성 - 트리거(TRIGGER) file 코난(김대우) 2023.08.18 87
2259 SQL강좌: 6-7. 데이터 무결성 - 사용자 정의 형식(User-Defined Type - UDT) 코난(김대우) 2023.08.18 48
2258 SQL강좌: 6-6. 데이터 무결성 - 기본값(DEFAULT) file 코난(김대우) 2023.08.18 33
2257 SQL강좌: 6-5. 데이터 무결성 - 규칙(RULE) 코난(김대우) 2023.08.18 48
2256 SQL강좌: 6-4. 데이터 무결성 - 체크 제약(CHECK Constraint) file 코난(김대우) 2023.08.18 51
2255 SQL강좌: 6-3. 데이터 무결성 - 기본 키(Primary Key) 제약, UNIQUE 제약, 외래 키(Foreign Key) 제약 file 코난(김대우) 2023.08.18 77





XE Login