[이론] 키와 무결성 제약조건
※ 키?
: 키란 관계 데이터베이스에서 튜플을 식별하기 위해 사용하는 속성이나 속성의 집합으로, 데이터베이스의 참조 또는 검색 시에 사용된다.
1. 키의 종류
1 ) 후보키 (Candidate Key)
: 테이블에서 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 집합을 말한다. 이때, 후보키는 유일성과 최소성을 모두 만족해야한다.
- 위 [학생] 테이블에서 학생 개개인을 구분하기 위해서는 학번이나 주민번호를 알면 된다. 따라서 '학번'과 '주민번호'는 후보키가 된다.
- [인명] 테이블에서는 이름과 주소가 각각 중복된 값이 존재할 수도 있으므로 이름, 주소를 조합한 (이름, 주소)가 후보키가 된다.
* 유일성 : 각 튜플을 유일하게 식별하는 성질
* 최소성 : 각 튜플을 유일하게 식별할 수 있는 최소 구성의 성질
2 ) 기본키 (Primary Key)
: 후보키 중에서 튜플을 식별하기 위해 특별히 선택된 키
- 기본키는 중복될 수 없으며, NULL값이 올 수 없다.
- 유일성과 최소성을 만족해야 한다.
- 위 [학생] 테이블에서 '학번'이나 '주민번호' 중에 기본키로 설정할 수 있다.
3 ) 대체키 (Alternate Key)
: 대체키는 후보키 중에서 기본키를 제외한 속성을 말한다.
- 위 [학생] 테이블에서 '학번'을 기본키로 설정했다면 대체키는 '주민번호'가 된다.
4 ) 외래키(Foreign Key)
: 하나의 테이블에서 원하는 자료를 얻지 못하는 경우 다른 테이블을 참조하기 위해 사용되는 속성을 말하며, 외래 식별자라고도 한다.
- 외래키는 참조 테이블의 기본키와 같아야 한다.
- 외래키는 NULL이 올 수 있다.
- 외래키의 속성명과 참조 테이블의 기본키 속성명은 서로 달라도 무방하다.
[교수] 테이블의 '학과 번호'를 외래키로 선정해 [학과] 테이블을 참조함ㄴ 된다. 이때, [학과] 테이블과 같이 참조되는 테이블을 '참조 테이블'이라고 한다.
※ 식별 관계와 비식별 관계
위와 같이 [교수] 테이블의 외래키로 '학과번호'를 선정한 경우, 즉 외래키가 일반 속성인 경우는 참조 테이블과 '비식별 관계'(=외래키가 일반 속성인 경우)라고 한다. 비식별 관계에서는 테이블을 참조하여 원하는 정보만 얻을 수 있는 관계이다. 반면 기본키를 외래키로 선정하여 다른 테이블을 참조하는 경우는 참조 테이블의 튜플을 식별할 수 있기 때문에 '식별 관계'(=외래키가 기본키인 경우)라고 한다.
5 ) 슈퍼키(Super Key)
: 한 테이블 내의 튜플들을 식별할 수 있는 후보키와 다른 속성들과의 모든 조합을 말한다.
- 슈퍼키는 유일성은 만족하지만, 최소성은 만족하지 않는다.
- 전에 살펴보았던 [학생] 테이블에서 학생 개개인을 구분하기 위한 모든 경우를 후보키와 조합하면 다음과 같다.
- (학번, 이름) , (학번, 주민번호), (학번, 학과), (학번, 학년) , (학번, 이름, 학과), (학번, 이름, 학과, 학번) ,...
2. 무결성(Integrity) 제약조건
: 정확성과 완전성을 유지하기 위한 제약조건이다.
1) 개체 무결성
- 기본키는 NULL 값이 올 수 없으며, 중복될 수 없음을 나타내는 제약조건이다.
- 개체 무결성은 개체를 식별하기 위해서 오류가 없도록 하기 위한 제약조건이다.
=> 학생 테이블에서 [학번]은 기본키이므로 NULL이나 중복된 값이 올 수 없다. (=개체 무결성)
2) 참조 무결성
- 외래키는 NULL 값이 올 수 있으며, 참조 테이블의 기본키와 같아야 한다.
- 제약조건으로 테이블 참조 시 오류가 없도록 하기 위한 제약조건
=> '학과번호'에서 참조하는 [학과] 테이블의 '학과번호'의 값은 반드시 존재해야 한다.(=참조 무결성)
3) 도메인 무결성
- 테이블에서 속성 값의 범위가 정의된 경우 그 속성 값은 정해진 범위 이내의 값으로 구성해야 하는 제약조건이며, 동일한 속성에 대해 데이터 타입과 데이터 길이가 동일해야 한다.
=> [학생] 테이블에서 학년 속성의 값으로 (1,2,3,4)만 올 수 있도록 도메인을 설정한 경우 그 외 값이 올 수 없다.(=도메인 무결성)
4) 고유 무결성
- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 달라야 하는 제약 조건
- 만약 [학생] 테이블에서 '이름' 속성에는 중복된 값이 없도록 제한했다면 '이름' 속성에는 중복된 이름이 있어서는 안 된다.
5) NULL 무결성
- 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우, 그 속성 값은 NULL 값이 올 수 없다는 제약 조건
- 만약 [학생] 테이블 정의 시 '학과' 속성에는 NULL이 올 수 없게 정의했다면, '학과'에 NULL이 있어서는 안 된다.
6) 키 무결성
- 한 테이블에는 최소한 하나의 키가 존재해야 하는 제약조건