데이터 무결성이란?
데이터 무결성은 데이터의 '정확성' 또는 '유효성'을 의미한다.
무결성 제약조건이란?
무결성 제약조건은 '데이터베이스 상태가 만족시켜야 하는 조건'이다.
즉, 사용자에 의한 데이터베이스 갱신(삽입, 삭제, 수정)이 데이터베이스의 일관성을 깨지 않도록 보장하는 수단이다.
- 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적 또는 명시적으로 정의하는 것을 목적으로 한다.
- 데이터베이스 접근 권한을 가진 사용자들로부터 데이터베이스의 정확성을 지키도록 한다.
- 다음과 같은 상황을 방지하기 위해서 필요하다.
- 어떤 학생이 수강신청을 했으나 학생들에 관한 정보를 저장하는 릴레이션에 해당 학생에 대한 데이터가 없다.
- 질의 처리 과정에서 학생의 학번과 과목의 번호를 비교한다 (비교할 수 없는 값끼리 비교)
- 학생이 자퇴를 하여 학생 릴레이션에서는 해당 학생의 데이터가 삭제되었으나, 수강 릴레이션에서는 여전히 남아있다.
- 데이터베이스의 상태가 현실에서 허용되는 상태만 나타낼 수 있도록 제한한다.
- 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사한다 => 응용 프로그램들은 일관성 조건을 검사할 필요가 없다.
무결성 제약조건의 유형
도메인 제약조건
- 각 애트리뷰트 값이 반드시 원자값이어야 한다.
- 애트리뷰트 값에 대해 데이터 형식(정수형, 문자형 등)을 제한하거나, 디폴트 값이나 범위를 지정할 수 있다.
- NOT NULL 구문으로 해당 애트리뷰트의 값이 존재하도록 보장할 수 있다.
키 제약조건
- 키 애트리뷰트에 대해 중복된 값이 존재해서는 안 된다.
- 릴레이션 정의시 기본키로 정의하거나 UNIQUE로 명시한 애트리뷰트에는 중복된 값이 허용되지 않는다.
엔티티 무결성 제약조건
- 릴레이션의 기본키를 구성하는 어떤 애트리뷰트도 NULL 값을 가질 수 없다.
- 대체 키에는 적용되지 않는다.
참조 무결성 제약조건
- 두 릴레이션의 연관된 튜플들 사이의 일관성을 유지하는 데 사용된다.
- 릴레이션 R2의 외래키가 릴레이션 R1의 기본키를 참조할 때 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족된다.
- 외래키의 값은 R1의 어떤 투플의 기본 키 값과 같다.
- 외래키가 자신을 포함하고 있는 릴레이션의 기본키를 구성하고 있지 않으면 NULL 값을 가진다.

무결성 제약조건의 유지
현재의 데이터베이스가 모든 무결성 제약조건을 만족한다고 가정할 때, 데이터베이스에 대한 검색 연산의 수행 결과는 아무런 제약조건을 위배하지 않는다.
그러나 데이터베이스에 대한 갱신 연산(삽입, 삭제, 수정)의 수행 결과에 따라서는 무결성 제약조건이 위배될 수 있다.
DBMS는 각각의 갱신 연산에 대하여 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취한다.
예를 들어, DBMS는 갱신 연산을 거절하거나, 갱신을 전파하여 다른 갱신들이 자동적으로 수행되도록 한다.
지금부터 DBMS가 무결성 제약조건을 유지하도록 취하는 조치들에 대해 알아보기 위해, 아래의 관계 데이터베이스 인스턴스를 예로 들어 설명해보겠다.

위의 EMPLOYEE 릴레이션의 DNO 애트리뷰트는 DEPARTMENT 릴레이션의 기본키인 DEPTNO를 참조하는 외래키에 해당한다.
삽입
삽입 연산의 결과가 무결성 제약조건을 위배하는 경우
- DEPARTMENT 릴레이션에 (3, 총무, 9) 튜플을 삽입 ➡️ 키 제약조건 위배 (DEPARTMENT 릴레이션에 부서번호가 3인 튜플이 이미 존재하므로)
- DEPARTMENT 릴레이션에 DEPTNO가 NULL 값인 튜플을 삽입 ➡️ 엔티티 무결성 제약조건 위배
- DEPARTMENT 릴레이션에 DEPTNAME이 숫자인 튜플을 삽입 ➡️ 도메인 무결성 제약조건 위배
이렇게 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 데이터베이스의 무결성을 유지한다.
삭제
참조하는 릴레이션(EMPLOYEE)에서 튜플이 삭제되는 경우에는 어떤 무결성 제약조건도 위배하지 않는다.
그러나, 참조되는 릴레이션(DEPARTMENT)에서 튜플이 삭제되는 경우, 참조 무결성 제약조건이 위배될 수도 있다.
삭제 연산의 결과가 무결성 제약조건을 위배하는 경우
DEPARTMENT 릴레이션에서 (3, 개발, 9) 튜플을 삭제 ➡️ 참조 무결성 제약조건 위배 (EMPLOYEE 릴레이션에서 더 이상 존재하지 않는 DEPTNO를 참조하게 되므로)
참조 무결성 제약조건을 만족시키기 위해 DBMS가 제공하는 옵션 3가지
릴레이션 정의시 DB 설계자(또는 DB 관리자)는 아래의 옵션들 중 한 가지 옵션을 명시해 선택할 수 있다.
1. 제한 (RESTRICTED)
참조 무결성 제약조건의 위배를 야기한 연산을 DBMS가 단순히 거절하는 것
2. 연쇄 (CASCADE)
참조되는 릴레이션에서 튜플을 삭제하고, 참조하는 릴레이션에서 이 튜플을 참조하는 튜플들도 함께 삭제하는 것

3. NULL 값 (NULLIFY)
참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 NULL 값을 삽입하는 것
(예시의 EMPLOYEE 릴레이션에서 2번째와 5번째 튜플의 DNO를 NULL 값으로 대체함. 만약 릴레이션 정의시 EMPLOYEE 릴레이션의 DNO 애트리뷰트에 대해 NOT NULL 조건을 명시했다면 DEPARTMENT의 튜플을 삭제하는 연산을 거절함)
4. 디폴트값
NULL 값을 넣는 대신에 디폴트값을 넣는다는 것을 제외하고는 바로 위의 옵션과 비슷함
수정
- 수정 연산은 릴레이션에서 하나 이상의 튜플의 하나 이상의 애트리뷰트 값을 수정하는 것이다.
- 수정 연산 실행시 DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사한다.
- 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니라면 수정 연산은 참조 무결성 제약조건을 위배하지 않는다. 따라서 DBMS는 수정하려는 애트리뷰트의 새로운 값이 올바른 데이터 타입과 도메인을 만족하는지 확인하기만 하면 된다.
- 기본 키나 외래 키를 수정하는 것은 하나의 튜플을 삭제하고 새로운 튜플을 그 자리에 삽입하는 것과 유사하므로, 삽입 및 삭제 연산에서의 제한, 연쇄, NULL 값, 디폴트값 규칙이 수정 연산에도 적용된다.
'Database' 카테고리의 다른 글
[데이터베이스] 키의 종류 및 특징 - 슈퍼키/후보키/기본키/대체키/외래키 (0) | 2024.04.12 |
---|---|
[데이터베이스] 관계 데이터 모델 용어 정리 (0) | 2024.04.11 |
[데이터베이스] 데이터베이스 개념 정리 (0) | 2024.04.11 |