6. 관계 데이터 모델과 관계 무결성 제약조건(3-2)
1. 키의 개념 및 종류
릴레이션의 특징 중의 하나가 한 릴레이션에 포함된 튜플들은 모두 달라야 한다는 것이었다.
릴레이션은 튜플의 집합이기에 튜플을 저장하다 보면 다음과 같은 정보를 삽입해야 할 경우가 생긴다.
이상(anomaly) 현상
- 데이터가 중복 저장되면 릴레이션 조작 시 예상하지 못한 곤란한 현상이 발생하는 현상
키
- 속성 혹은 속성의 집합으로 튜플을 고유하게 식별할 수 있도록 하는 속성 혹은 속성의 집합
- 데이터를 검색하거나 정렬할 때 기준이 되는 유일하게 구분되는 속성으로 수퍼키, 후보키, 기본키, 외래키 등이 있음
수퍼키와 후보키
수퍼키(Super Key)
- 릴레이션을 구성하는 속성들 중에서 각 튜플을 유일하게 식별하기 위해 사용하는 하나 혹은 그 이상의 속성들의 집합
- 유일성이란 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있는 성격
- 최소성은 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성으로만 구성되어야 하는 성질
후보키(candidate key)
- 릴레이션을 구성하는 속성들 중에서 각 튜플을 유일하게 식별하기 위해 사용하는 하나 혹은 그 이상의 속성들의 집합
- 수퍼키와의 공통점 : 릴레이션에 있는 각 튜플을 고유하게 식별할 수 있어야 한다는 점
- 수퍼키와의 차이점 : 최소한의 속성으로 구성된 유일성을 갖는 속성의 집합
기본키 (Primary key : PK)
- 후보키 중 튜플을 식별하는데 기준으로 사용하는 키
- 후보키 중에서 선택한 것이기에 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성
- Null 값을 가질 수 없음
- 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없음
*Null 값은 데이터베이스에서 아직 알려지지 않거나 모르는
값으로써 “해당없음” 등의 이유로 정보 부재를 나타내기 위해
사용하는, 이론적으로 아무것도 없는 특수한 데이터를 말한다.
대체키 (Alternate key)
- 후보키가 둘 이상일 때 기본키로 선택되지 않은 나머지 후보키
- 보조키라고도 함
- 사원번호를 기본키로 정의하였다면 주민번호가 대체키가 됨
복합키
- 하나의 칼럼이 후보키의 역할을 하지 못함
- 두 개 이상의 칼럼이 합쳐져야 후보키의 역할을 하는 경우를 말함
외래키 (Foreign Key)
- 상호 관련이 있는 테이블들 사이에서 데이터의 일관성을 보장해 주는 수단
외래키의 필요성을 설명하기 위해서 다음과 같은 질문
- CASE1 부서 릴레이션의 첫 번째 튜플이 삭제된다면 어떻게 될까?
- CASE2 부서 릴레이션의 20번 부서 번호가 50으로 변경된다면 어떻게 될까?
- CASE3 사원 릴레이션에 부서 번호 60인 사원이 삽입된다면 어떻게 될까?
2. 무결성 제약조건
개체 무결성
- 개체가 결점이 없음을 의미
- 결점이 없는 무결한 개체가 되려면 데이터베이스에 저장되어 관리될 때 본질적으로 서로 구별될 수 있어야 함
- 개체를 유일하게 식별하기 위해서는 당연히 식별자가 반드시 있어야 함
릴레이션을 구성하는 속성 중의 하나를 기본키로
지정하여 널(NULL) 값이나 중복된 값을 가질 수 없는
속성을 갖도록 하여 언제 어느 때고 개체가 유일하게
식별 가능하도록 하는 것이 ‘개체 무결성 제약조건’이다.
- 기본키 값이 널 값을 갖게 된다면 튜플을 유일하게 식별할 수 없게 됨
- 튜플을 유일하게 식별할 수 없게 되면 서로 구별할 수 없는 개체가 존재하게 된다는 의미가 되기에 개체 무결성에 위배됨
- 기본키의 유일한 식별성을 잃지 않도록 하기 위해서는 중복되는 값을 갖지 말아야 함
- 동시에 널 값 역시 포함되어서는 안 된다.
- 특정 개체가 무결성을 유지하도록 하기 위해서 릴레이션을 생성하는 데
이터 정의문에서 어떤 속성이 릴레이션의 기본키인지를 알려주어야 함
- 기본키로 제약조건을 지정한 속성은 널(NULL) 값이나 중복된 값을 가질 수 없음
예
‘사원’ 릴레이션에서 ‘사원번호’가 기본키로 정의되면 튜플을 추가할 때
‘주민번호’나 ‘ 성명’ 필드에는 값을 입력하지 않아도 되지만 ‘사원번호’
속성에는 반드시 값이 입력되어야 한다. 또한 ‘사원번호’ 속성에는 이미 한
번 입력한 속성값을 중복하여 입력할 수 없다.
참조 무결성
- 참조 무결성은 릴레이션 간에 적용되는 제약조건
- 릴레이션 모델에서는 두 객체 간의 관계를 외래키 혹은 릴레이션으로 표현함
외래키를 통해 릴레이션은 참조할 수 없는 외래키 값을 가질
수 없도록 함으로써 두 테이블 간의 데이터 무결성을
유지하는 것을 ‘참조 무결성 제약조건’이라고 한다.
예
‘사원’ 릴레이션의 ‘부서 번호’ 속성에는 ‘부서’ 릴레이션의
‘부서 번호’ 속성에 없는 값은 입력할 수 없다.
참조 무결성 제약조건의 유지
- 두 테이블 간에 외래키에 의한 참조 관계에 있고 두 테이블 간 데이터 불
일치가 발생하는 상황이 될 때, DBMS는 제한(restrict), 연쇄(cascade),
널 값으로 대체(nullify)와 같은 조치를 취할 수 있다.
부서테이블의 첫 번째 튜플을 삭제하려 할 때
- 제한(restrict)은 삭제하려는 튜플의 부서 번호 값을 사원 테이블에서 가
지고 있는 튜플이 있으므로 삭제 연산을 거절
- 연쇄(cascade)는 삭제된 부서 번호 값을 갖는 사원 테이블의 튜플도 함께 삭제
- 널 값으로 대체(nullify)는 삭제연산을 수행한 뒤 삭제된 부서 번호 값을
갖는 사원 테이블의 튜플에서 부서 번호를 null 값으로 대체