[Database] 개체 무결성, 참조 무결성

개체 무결성, 참조 무결성

데이터베이스의 기본 키와 외래 키에 관련된 무결성에 대해 알아보자.

개체 무결성

테이블을 구성할 때 테이블의 기본 키를 구성하는 어떤 속성도 NULL 값을 가져서는 안 된다. 이러한 속성은 기본 키가 하나의 속성일 때도 당연히 적용되고, 기본 키가 두 개 이상의 속성일 때도 어떠한 속성도 NULL 값이 되면 안된다.

아래와 같이 근로 장학생의 ID, 근로 부서의 ID로 근로자의 평가 등급을 조회하는 테이블이 있고, 추가로 근로 시간도 테이블에 포함되어 있다고 생각하자.

근로자 평가 테이블
1

이러한 테이블에서는 근로 장학생을 평가하고 그에 대한 등급을 내릴 때, 반드시 그 학생을 구분할 수 있는 기준이 근로 장학생 ID와 근로 부서 ID이기 때문에 두 개가 기본 키가 된다. 따라서, 근로 장학생 ID나 근로 부서 ID 중 하나라도 NULL 값이 되면 안 된다. 근로 시간 같은 경우엔 꼭 NOT NULL 옵션이 아니더라도, 개체 무결성을 만족할 수 있다.

참조 무결성

테이블의 외래 키값은 NULL 이거나, 참조 릴레이션의 기본 키값과 동일해야 된다. 따라서 외래 키값으로 다른 테이블의 기본 키에 없는 값이 들어올 수 없으며, 이를 통해 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장한다. 또 한, 한 테이블의 행을 다른 테이블이 참조키로 참조하고 있을 때, 그 키는 바로 삭제될 수 없고, 추가적인 옵션이 필요하다.

근로 장학생 테이블
2

예를 들어 위와 같이 근로 장학생에 대한 테이블이 있고, 개체 무결성을 설명하면서 보여줬던 테이블이 이 근로장학생 테이블을 외래 키로 참조하고 있다고 생각하자. 근로 장학생 테이블에선 1,2,3,4번의 ID를 가진 학생이 존재하므로, 이를 외래 키로 참조할 때 참조 키가 1,2,3,4가 아닌 다른 수 (5,6,7,8 …) 을 참조할 순 없다. 또한 개체 무결성에서 보여준 테이블이 1,2,3,4번 학생을 외래 키로 참조하고 있기 때문에, 근로 장학생 테이블에서 1,2,3,4번 키를 바로 지울 수는 없다.