1. 제약 조건
1) 데이터 무결성을 지키기 위해 데이터베이스에 들어간 데이터에 제약 조건을 주는 것.
예를 들어 사용자가 잘못된 데이터를 입력했을 경우를 대비해 여러가지 제약 조건을 주어
잘못된 값은 들어오지 못하게 막아주는 것.
2) 도메인 제약, 기본 키 제약 등등이 있다.
2. 도메인 제약
1) 속성에 들어오는 값의 범위를 제한하는 것이다.
2) 가장 기본적인 형태의 제약 조건으로 속성의 자료형을 제한한다.
이름 char(20)
→ 이름 속성은 char 자료형으로 제한
3) 자료형만으로 제약이 어려울 경우 check라는 SQL문으로 조건문을 걸 수 있다.
성적 int check(성적 >= 0 and 성적 <= 100)
→ 성적 속성의 값을 int 자료형 0 ~ 100으로 제한
4) 속성에 전부 기본 값을 주고 싶을 경우 default라는 SQL문으로 기본값을 지정할 수도 있다.
성적 int default 0
→ 성적 속성 값은 기본적으로 0으로 세팅된다.
5) 반드시 값이 들어가야 하는 속성의 경우 not null이라는 SQL문으로 설정할 수 있다.
create table 학생 (학번 char(10) not null, 이름 char(20))
→ 레코드 삽입할 때 학번 속성에 값을 넣지 않으면 에러가 발생한다.
3. 기본키 제약
- 기본키 제약으로 개체무결성을 지킬 수 있다.
즉 기본키로 설정한 속성 집합에는 null이 들어갈 수가 없고
(따라서 기본키에는 not null과 같은 SQL문도 필요없다.)
이미 존재하는 값을 기본키로 설정할 수 없다.
4. 외래키 제약
1) 외래키 제약으로 참조무결성을 지킬 수 있다.
외톨이 투플이 없다면 참조무결성을 지킬 수 있다.
다시 말해 외톨이 투플이 있다면 참조무결성이 깨질 수 있다.
2) 외톨이 투플이 생기는 경우
- 외톨이 투플 : 자연 조인 연산을 할 때 짝이 없는 튜플
- 상위 테이블 : 두 테이블이 자연 조인했을 때 공통속성이 기본키인 테이블
- 하위 테이블 : 두 테이블이 자연 조인했을 때 공통속성이 외래키인 테이블
- 외톨이 투플이 생기는 경우 :
하위 테이블에 있는 있는 어떠한 레코드의 외래키를
참조한 상위테이블에 갔을 때 그 기본키가 없으면
하위 테이블의 레코드를 외톨이 투플이라 할 수 있다.
즉 하위 테이블에 외톨이 투플이 있는 경우 참조 무결성이 깨진다.
따라서 참조 무결성이 깨질 때를 대비해서 DBMS가 이를 방지해 준다.
3) 참조무결성이 깨지는 경우
(1) 상위테이블의 레코드 입력
상위 테이블에는 외톨이 투플이 생겨도 문제가 없다.
신경쓰지 않아도 되는 케이스.
(2) 상위테이블의 레코드 수정
- 하위테이블의 외래키가 상위테이블의 기본키로 참조되어 있는 상태일 때
상위테이블의 기본키 값을 수정하면 참조 무결성이 깨진다.
- 이럴 경우, DBMS가 이를 사전에 막아주거나
on update cascade SQL문으로
시스템이 상위, 하위 테이블의 기본키, 외래키를 모두 수정하는 방법을 쓸 수 있다.
(3) 상위테이블의 레코드 삭제
- 하위테이블의 외래키가 상위테이블의 기본키로 참조되어 있는 상태일 때
상위테이블의 기본키 값을 삭제하면 참조무결성이 깨진다.
- 이럴 경우, DBMS가 이를 사전에 막거나
on delete cascade SQL문으로
시스템이 상위, 하위 테이블 모두 삭제하는 방법을 쓸 수 있다.
이는 수정과는 다르게 하위 테이블을 먼저 삭제하고 상위를 삭제한다면 참조무결성을 깨지 않고 삭제가 가능하다.
(4) 하위테이블의 레코드 입력
- 상위테이블의 기본키에는 없는 값을 하위테이블의 외래키로 입력하면
참조무결성이 깨진다.
- 이는 DBMS가 입력을 막아준다.
(5) 하위테이블의 레코드 수정
- 상위테이블의 기본키에는 없는 값으로 하위테이블의 외래키를 수정하면
참조무결성이 깨진다.
- 이는 DBMS가 입력을 막아준다.
(6) 하위테이블의 레코드 삭제
- 참조무결성과 관계가 없다.
'CS > 데이터베이스 DB' 카테고리의 다른 글
[데이터베이스] 정규형(Normal form)과 정규화(Normalization) (0) | 2022.06.13 |
---|---|
[데이터베이스] 함수적 종속(Functional Defendency) (0) | 2022.06.09 |
[데이터베이스] 개체 관계 모델(E-R model) (0) | 2022.06.07 |
[데이터베이스] 데이터 모델링 과정 (0) | 2022.06.07 |
[데이터베이스] 통계함수(count, sum, avg, max, min) (0) | 2022.04.22 |