데이터 무결성이란 데이터의 정확성 또는 유효성을 의미한다. 따라서 데이터의 무결성을 지키기 위해서는 일관된 데이터베이스 상태를 유지하기 위한 규칙들을 묵시적 또는 명시적으로 정의해야 한다.
데이터베이스가 갱신될 때, DBMS가 자동적으로 무결성 제약 조건을 검사하므로 응용 프로그램들은 무결성 제약 조건을 검사할 필요가 없다.
무결성 제약 조건?
: 데이터 무결성을 유지하기 위해 반드시 지켜야 하는 조건들을 의미한다.
도메인 제약조건
: 각 애트리뷰트 값이 반드시 원자값이어야 한다. 데이터 타입을 통해 값들의 유형(정수형, 문자형 등)을 제한할 수 있다. 디폴트 값, CHECK 제약 조건을 통해 값들의 범위를 제한할 수 있다. (CHECK GRADE = A, B, C, D, F)
키 제약조건
: 키 애트리뷰트에 중복된 값이 존재해서는 안 된다.
릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 null 값을 가질 수 없다. 당연하지만, null 값을 가지면 식별이 안되기 때문이다. 대체 키에는 적용되지 않는다.
개발자는 릴레이션을 생성하는 데이터 정의문에 어떤 애트리뷰트가 기본 키인지 명시해야 한다.
외래 키는 두 릴레이션 간의 연관성을 유지하기 위해 사용된다. 참조 무결성 제약조건이란, 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다.
관계 데이터베이스는 릴레이션들로만 이루어져 있고, 릴레이션 사이의 관계는 외래 키와 참조되는 기본텍스트 키 간의 연결을 기반으로 하기 때문에 외래 키의 개념이 매우 중요하다.
따라서 참조 무결성 제약조건이 지켜지지 않게 되면, 두 릴레이션 간의 연관성이 일관적이지 않게 된다. 즉, 릴레이션 간의 관계가 깨질 수도 있다는 것이다.
릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때, 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족된다.


데이터베이스에 대한 갱신 연산은 크게 삽입, 수정, 삭제 연산 세 가지로 구분할 수 있다. DBMS는 각각의 갱신 연산에 대해 데이터베이스가 무결성 제약조건을 유지할 수 있도록 필요한 조치를 취할 수 있어야 한다.
즉, DBMS는 외래 키 또는 기본 키가 갱신되었을 때 참조 무결성 재약조건이 위배되지 않도록 해야 한다.

참조되는 릴레이션에 새로운 투플이 삽입되어도 참조 무결성 제약조건은 위배되지 않는다. 참조 무결성 제약조건 이외의 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건은 위배될 수 있다.
참조되는 릴레이션의 기본 키에 이전에 존재하지 않던 값이 들어와도 이를 참조하는 외래 키에는 아무런 영향을 미치지 않는다. 즉, DEPARTMENT 릴레이션에 새로운 부서가 추가되더라도 이를 참조하던 EMPLOYEE 릴레이션에는 어떠한 영향도 없다는 것이다.
반대로 참조하는 릴레이션에 새로운 투플을 삽입할 때는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 이외에도 참조 무결성 제약조건을 위배할 수 있다.
EMPLOYEE 릴레이션에 (4325, '카리나', 6)이라는 투플을 삽입하면 참조 무결성 제약조건을 위배하게 된다. 6은 DEPARTMENT 릴레이션의 기본 키에 없는 값이기 때문이다.
참조하는 릴레이션에서 투플이 삭제되면 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않는다.
참조되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배할 수 있다. 외래 키가 참조하고 있던 기본 키가 삭제되는 경우에는 참조 무결성 제약조건이 위배된다.
DEPARTMENT 릴레이션에서 세 번째 투플인 (3, '개발', 9) 를 삭제하면 참조 무결성 제약조건을 위배하게 된다.
제한 (restricted)
: 참조 무결성 제약조건의 위배를 야기하는 연산을 단순히 거절하는 것이다.
연쇄 (cascade)
: 참조되는 릴레이션에서 투플을 삭제했을 때 참조 무결성 제약조건이 위배된다면, 삭제되는 기본 키를 참조하고 있던 참조하는 릴레이션의 투플들을 함께 삭제하는 것이다.
즉, 문제가 되는 투플들을 모두 연쇄 삭제 하는 것이다.
null
: 참조되는 릴레이션에서 투플들을 삭제하고, 참조하는 릴레이션에서 삭제된 기본 키를 참조하고 있던 투플들의 외래 키에 null을 삽입하는 것이다.
default
: null 대신에 사용자가 지정한 default 값을 삽입.
DBMS는 수정하려는 애트리뷰트가 기본 키 또는 외래 키인지 검사한다. 만약 둘 다 아닌 경우는 참조 무결성 제약조건을 위배하지 않을 것이다.
그러나 참조 무결성 제약조건이 위배되는 경우에는 위에서 설명한 제한, 연쇄, null, default 규칙이 동일하게 적용된다. 그 이유는 외래 키 또는 기본 키를 수정하는 것은 기존의 투플을 삭제하고 그 자리에 새로운 투플을 삽입하는 것과 유사하기 때문이다. 즉, 삽입과 삭제 연산과 동일한 규칙을 적용할 수 있다는 것이다.