본문 바로가기
DBMS/SQL

[데이터베이스] 무결성 제약 조건 (Integrity Constraints : IC)

by webcodur 2024. 3. 21.
728x90

목차

    1. 무결성 조건

    • 데이터의 정확성 및 일관성을 보장하는 속성
    • 데이터가 정확하게 저장되고 유지되도록 함으로써, DB 시스템의 기본적인 목표인 데이터의 신뢰성을 확보하는 데 중요한 역할
    • DB 무결성을 유지하기 위한 여러 유형의 제약 조건과 규칙이 있으며, 이러한 무결성은 크게 세 가지 주요 유형으로 나눌 수 있다.
    • 이러한 규칙은 데이터의 추가, 삭제, 수정이 이루어질 때 적용되어 DB의 무결성을 유지하는 데 필수적이다.

     

     

    2. 기본 무결성 규칙

    다음은 기본적인 3개 무결성 규칙으로 각종 국가고시에도 출제되는 중요한 내용이다.

    2.1 개체 무결성(Entity Integrity)

    • 정의: 테이블의 모든 행은 유일한 식별자를 가져야 한다.
    • 목적: 각 행(레코드)을 고유하게 식별하여 데이터 중복을 방지하고, 데이터의 정확성을 보장한다.
    • 구현: 기본 키를 설정하여 각 행이 유일하고, NULL이 아닌 값을 가지도록 한다.

    예시 테이블

    • 제약 조건: UserID를 기본 키로 설정
    • 설명: UserID는 각 사용자를 고유하게 식별할 수 있어야 하므로 중복될 수 없으며, NULL 값이 될 수 없다.
    UserID Name Age
    1 홍길동 30
    2 이순신 45
    3 박보영 25

     

     

     

    2.2 참조 무결성(Referential Integrity)

    • 정의: 외래 키 값이 참조하는 테이블의 기본 키 값을 정확히 반영해야 한다는 규칙. 외래 키는 NULL이거나 참조하는 테이블의 유효한 기본 키 값과 일치해야 한다.
    • 목적: 두 테이블 간의 관계를 정확하게 유지하여 데이터의 일관성을 보장한다.
    • 구현: 외래 키 제약 조건을 사용하여 참조 무결성을 강제한다. 제약을 이탈해야 하는 경우 외래키 옵션을 사용한다.

     

    외래키 옵션

    참조 무결성을 유지하기 위한 외래 키 옵션은 P(부모 테이블)의 레코드가 변경되거나 삭제될 때 C(자식 테이블)의 레코드에 대해 어떤 조치를 취할지를 정의한다. 다음은 외래 키 옵션들을 P와 C의 관계를 기준으로 설명한 것이다:

     

    1. CASCADE

    • UPDATE CASCADE: P에서 키가 변경되면, C의 관련 외래 키도 같은 값으로 업데이트된다.
    • DELETE CASCADE: P에서 레코드가 삭제되면, 해당 레코드를 참조하는 C의 레코드도 삭제된다.

    2. SET NULL

    • UPDATE SET NULL: P에서 키가 변경되면, C의 관련 외래 키는 NULL로 설정된다 (외래 키 컬럼이 NULL을 허용하는 경우에만 가능).
    • DELETE SET NULL: P에서 레코드가 삭제되면, 해당 레코드를 참조하는 C의 레코드의 외래 키 값이 NULL로 설정된다.

    3. SET DEFAULT

    • UPDATE SET DEFAULT: P에서 키가 변경되면, C의 관련 외래 키는 그 컬럼에 설정된 기본값으로 설정된다.
    • DELETE SET DEFAULT: P에서 레코드가 삭제되면, 해당 레코드를 참조하는 C의 레코드의 외래 키 값이 기본값으로 설정된다.

    4. NO ACTION / RESTRICT

    • NO ACTION: 참조 무결성 규칙을 위반하는 변경 사항이 시도될 경우, 아무런 조치도 취하지 않고 에러를 반환한다. 즉, P의 변경이나 삭제가 C의 참조 무결성을 위반한다면, 그 작업은 거부된다.
    • RESTRICT: 이 옵션 역시 NO ACTION과 유사하게 작동하여, P의 변경이나 삭제가 C의 참조 무결성을 위반하는 경우, 작업이 거부된다. RESTRICT는 해당 작업이 수행되기 전에 즉시 거부되며, NO ACTION은 실제로 작업이 수행되려고 할 때 거부된다는 점에서 차이가 있다.

    예시 테이블

    • 제약 조건: Orders 테이블의 UserIDUsers 테이블의 UserID를 외래 키로 참조
    • 설명: Orders 테이블에서 사용하는 UserID 반드시 Users 테이블에 존재해야 한다.
    UserID Name
    1 홍길동
    2 이순신

     

    OrderID UserID Product
    101 1 사과
    102 2 바나나

     

     

     

     

    2.3 도메인 무결성(Domain Integrity)

    • 정의: 필드(컬럼)의 값이 정의된 도메인(유효한 값의 범위, 데이터 타입 등)에 속해야 한다는 규칙
    • 목적: 데이터 필드가 받을 수 있는 유일한 값들만 저장함으로써 데이터의 정확성과 일관성 보장
    • 구현: 데이터 타입, 기본값, NOT NULL 제약 조건, CHECK 제약 조건 등을 사용하여 도메인 무결성을 유지한다.

    예시 테이블

    • 제약 조건: Age 필드는 정수형이며, 값은 0보다 커야 한다.
    • 설명: 사용자의 나이(Age)는 정해진 데이터 타입(정수)과 조건(0보다 큼)을 만족해야 한다.
    UserID Name Age
    1 홍길동 30
    2 이순신 45
    3 박보영 25

     

     

     

     

    3. 추가적인 무결성 규칙

    그 밖에 참고하면 좋을만한 다른 무결성 규칙들이다.

    3.1 Null 무결성(Null Integrity)

    • 정의: 테이블의 특정 속성이 NULL 값을 가질 수 없게 하는 조건이다.
    • 목적: 중요한 정보가 누락되지 않도록 하여 데이터의 완전성을 확보하는 데 있다.
    • 구현: 필드 정의 시 NOT NULL 제약 조건을 적용하여 NULL 값을 허용하지 않는다.

    3.2 고유 무결성(Unique Integrity)

    • 정의: 테이블의 특정 속성에 대해 각 레코드가 갖는 값들이 서로 다르게 하는 조건이다.
    • 목적: 데이터의 고유성을 보장하여 중복 데이터 입력을 방지한다.
    • 구현: 고유성을 요구하는 필드에 UNIQUE 제약 조건을 설정한다.

    3.3 키 무결성(Key Integrity)

    • 정의: 하나의 테이블에 최소한 하나의 키(기본 키 또는 고유 키)가 있어야 하며, 이 키를 통해 테이블 내의 각 레코드를 유일하게 식별할 수 있는 조건이다.
    • 목적: 데이터의 식별성과 접근성을 확보한다.
    • 구현: 기본 키나 고유 키 제약 조건을 사용해 테이블 내 레코드의 고유성을 확보한다.

    3.4 관계 무결성(Relationship Integrity)

    • 정의: 한 테이블의 레코드 삽입이 가능한지, 또는 한 테이블과 다른 테이블 사이의 레코드들 간의 관계가 적절한지를 지정하는 조건이다.
    • 목적: 테이블 간 정의된 관계가 올바르게 유지되도록 보장하여 데이터 간의 정확한 연관성과 정보 참조를 유지하는 데 있다.
    • 구현: 외래 키 제약 조건을 사용해 테이블 간의 관계를 정의하고 참조 무결성을 강제한다.

    3.5 사용자 정의 무결성(User-Defined Integrity)

    • 정의: 특정 애플리케이션의 비즈니스 규칙이나 조건을 반영하기 위해 사용자가 추가로 정의하는 제약 조건이다.
    • 목적: 데이터가 특정 애플리케이션의 요구사항이나 비즈니스 로직을 만족시키도록 보장한다. 이는 데이터베이스의 일반적인 무결성 규칙을 넘어서 애플리케이션 특유의 요구를 충족시키는 데 초점을 맞춘다.
    • 구현CHECK 제약 조건을 활용하거나, 트리거와 같은 데이터베이스 프로그래밍 기능을 사용해 비즈니스 로직에 맞는 복잡한 제약 조건을 구현한다.