1. 도메인 제약조건 

: 가장 간단한 형태의 제약 조건.
 - 각 애트리뷰트 값이 반드시 원자 값이 여야 하고, 데이터 형식을 통해 값들의 유형(정수, 실수, 문자형)을 제한하고 애트리뷰트의 디폴트 값을 지정하고, 애트리뷰트에 저장되는 값들의 범위를 제한
- 릴레이션 정의할 때 애트리뷰트 선언에 NOT NULL 구문 붙이면 모든 튜플에서 해당 애트리뷰트의 값이 존재하도록 보장
- 어느정도의 데이터 무결성 유지

 



2. 키 제약조건

 : 키 애트리뷰트에 중복된 값이 존재해서는 안된다. 
- 릴레이션 정의할 때 기본 키로 정의하거나 UNIQUE를 명시한 애트리뷰트에는 중복된 값이 허용되지 않는다.

 


3. 기본 키와 엔티티 무결성 제약조건 

 : 릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 널 값을 가질 수 없다는 것
- 기본키는 튜플들을 고유하게 식별하고 효율적으로 빠르게 접근하는 데 사용 / 두 개 이상의 튜플이 동일한 기본키 값을 가질 수 없다
- 이 제약조건은 대체 키에는 적용 안됨
- 어떤 엔티티에 관한 정보를 릴레이션에 저장하려면 식별 가능해야 하기 때문에 엔티티 무결성 제약조건이 필요

 



4. 외래키와 참조 무결성 제약조건

 : 두 릴레이션의 연관된 투플 사이의 일관성 유지하는 데 사용
R1 (기본키) R2 (외래 키)  -> R2는 R1을 참조
- 외래키의 값은 R1의 어떤 튜플의 기본키와 같다
- 외래키가 자신을 포함하고 있는 릴레이션의 기본키를 구성하고 있지 않으면 널값 가진다.

 


- 무결성 제약조건의 유지 : 삽입 연산, 삭제 연산, 수정 연산으로 구분함
EMPLOYEE 릴레이션은 DEPARTMENT 릴레이션의 기본키를 참조한 외래 키가 있을 시
DEPARTMENT를 참조된 릴레이션, EMPLOYEE를 참조하는 릴레이션이라고 부름

 

 


1. 삽입 

: 참조되는 릴레이션에 새로운 투플이 삽입되면 참조 무결성 제약조건은 위배되지 않는다
- 왜냐하면 참조하는 릴레이션의 기본의 튜플들은 참조되는 릴레이션에 추가되는 튜플과 아무런 연관을 갖지 않기 때문에
- DEPARTMENT에 새로 삽입되는 튜플의 기본 키 애트리뷰트의 값에 따라서 도메인 제약조건, 키 조약 조건, 엔티티 무결성 제약조건 등을 위배할 수 있다
- 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 데이터베이스의 무결성 유지

 


2. 삭제 

: 참조하는 릴레이션에서 튜플이 삭제되면 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않는다.
그러나 참조되는 릴레이션에서 튜플 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있다.
참조 무결성을 유지하기 위한 옵션의 선택은 응용ㅇ의 의미에 의존한다. 이중 한 가지 옵션 명시

- 제한(RESTRICTED) : 위배를 야기한 연산을 단순히 거절
DEPARTMENT 릴레이션에서 세번째 투플인 (3, 개발, 9)를 삭제하면 참조 무결성 제약조건 위배해 삭제 연산 거절
- 연쇄(CASECAED) : 참조되는 릴레이션에서 투플 삭제하고 참조하는 릴레이션에서 이 투플을 참조하는 투플들로 함께 삭제
- 널값(NULLIFY) : 참조되는 릴레이션에서 튜플 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 널 값 넣는다
 이때 애트리뷰트를 NOT NULL이라고 명시했다면 튜플 삭제 연산 거절함
- 디폴트값 : 널값을 넣는 대신에 디폴트 값을 넣는다는 것 제외하고는 위와 동일
릴레이션 정의할 때 디폴트 값 지정해 줘야 하고, 지정하지 않았다면 투플 삭제 연산 거절

 


3. 수정

 : 주어진 릴레이션에서 하나 이상의 튜플의 하나 이상의 애트리뷰트 값을 수정하는 것
DBMS는 수정 연산에 대해 무결성 제약조건을 유지하기 위해서 수정하는 애트리뷰트가 기본키인지 외래 키인지 검사한다.
수정하려는 애트리뷰트가 기본키도 아니고 외래키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않는다.
DBMS는 수정하려는 애트리뷰트의 새로운 값이 올바른 데이터 타입과 도메인을 만족하는지 확인하기만 하면 된다.

위이 제한, 연쇄, 널값, 디폴트 값 규칙이 수정 연산에도 적용됨
-> 정의할 때 필요한 옵션 정확하게 명시하지 않았다면(디폴트 값인지 널값인지 참조되는 릴레이션의 수정으로 참조하는 릴레이션도 모두 수정이 되는지) 수정 연선 거절

+ Recent posts