티스토리 뷰

주장은 데이터 정의문의 CREATE ASSERTION 문을 사용. 

 

WHAT?(무엇인가?)

제약조건 명시를 위해서 사용하는 선언적 주장을 일반적인 제약조건이 아니여도 설정할 수 있고 이것을 제약조건을 명시한다고 CREATE ASSERTION한다고 한다.

이것은 WHERE절에서 조건을 명시하는 것과 비슷한 맥락으로 이해하면 쉽다.

 

 

HOW?(어떻게사용하는가?)

- 제약조건의 이름을 설정하고 제약조건의 사용을 위해서 해당 이름을 이용한다.

- CHECK와 함께 사용되며 CREATE ASSERTION에 적힌 제약조건 명을 만족한다면 CHECK를 통해 참인지 판단하고 만약 참이라면 그 뒤의 문장들을 실행한다(SELECT-FROM-WHERE문 등)

- 대부분의 제약조건은 EXISTS나 NOT EXISTS를 사용해서 명시하고 WHERE절을 사용하기도 한다.

- 제약조건을 만족하는 투플들이 집합이 단 하나도 없어야 제약조건을 만족한다고 한다(참이된다).

CHECK절의 적용 범위 

=> 개별 속성, 도메인들에 대한 제약조건으로 사용

=> 개별 투플에 대한 제약조건을 명시하기 위해서 사용될 수 있음.

 

CREATE ASSERTION문과 개별 도메인 제약 조건 및 개별 투플들에 대한 CHECK절의 차이점

=> CHECK절만 사용했을 때는 투플이 삽입되거나 수정될때만 SQL에서 검사된다.

=> 투플을 삽입하거나 수정할 때만 제약조건이 위반될 수있을 것을 확신할 수 있을 때 애트리뷰트, 도메인, 투플에 대해서 CHOECK를 사용해야한다는 것이다.

=> CHECK를 사용할 수 없을 경우에만 CREATE ASEERTION을 사용해야한다.

 

적용방법

CREATE ASSERTIONS SALARY_CONSTRAINT

CHECK (NOT EXISTS

                         ( SELECT ~~ FROM ~~ WHERE ~~ ) )

 

=> SELECT FROM WHERE을 통한 문장에서 만족하는 집합이 하나도 없다면 참이다.

즉, SELECT FROM WHERE을 통한 집합이 공집합일 경우에만 참으로 CHECK되고 공집합이 아니라면 CHECK가 거짓에 되어 SALARY_CONSTRAINT 제약조건을 만족하지 않는것이된다.