데이터베이스/용어정리

참조 무결성이란?

Blue_bull 2025. 1. 27. 14:06

참조 무결성(Referential Integrity) 는 데이터베이스 관리에서 외래키(Foreign Key) 를 사용하여, 테이블 간의 관계에서 일관성과 정확성을 유지하기 위한 규칙입니다.
이는 데이터베이스의 두 테이블 간의 참조 관계에서 잘못된 데이터가 저장되지 않도록 보장하는 중요한 개념입니다.


1. 참조 무결성의 정의

참조 무결성은 외래키가 참조하는 값이 항상 유효해야 한다는 규칙입니다.
즉:

  1. 외래키 값은 참조하는 기본키 값과 일치해야 합니다. (유효한 값이어야 함)
  2. 외래키 값이 NULL일 수 있는 경우에는 참조 대상이 없어도 됩니다.

2. 참조 무결성의 주요 목적

  • 데이터베이스에서 논리적 오류를 방지.
  • 테이블 간의 데이터 관계를 유지하고, 데이터가 유효한 상태로 관리되도록 보장.
  • 부모 테이블자식 테이블의 관계에서 불일치가 발생하지 않도록 관리.

3. 참조 무결성의 동작 조건

3.1 외래키(Foreign Key)와 기본키(Primary Key)의 관계

  • 외래키는 한 테이블의 열(column)로, 다른 테이블의 기본키를 참조합니다.
  • 외래키가 참조하는 기본키 값은 항상 유효한 값이어야 합니다.

3.2 동작 규칙

  • 삽입 규칙:
    • 외래키로 입력하려는 값은 반드시 참조하는 기본키 테이블에 존재해야 합니다.
    • 그렇지 않으면 삽입이 거부됩니다.
  • 삭제 규칙:
    • 부모 테이블의 기본키가 삭제되면, 이를 참조하는 자식 테이블의 외래키 처리 방식을 설정해야 합니다.
    • 처리 방식:
      • CASCADE: 부모 데이터를 삭제하면 자식 데이터도 함께 삭제.
      • SET NULL: 부모 데이터를 삭제하면 자식 데이터의 외래키 값을 NULL로 설정.
      • RESTRICT/NO ACTION: 부모 데이터가 참조 중이면 삭제를 금지.
  • 수정 규칙:
    • 부모 테이블의 기본키 값이 수정되면, 자식 테이블의 외래키 처리 방식을 설정해야 합니다.
    • 처리 방식:
      • CASCADE: 부모 데이터의 기본키 값이 변경되면, 자식 데이터의 외래키 값도 함께 변경.
      • SET NULL: 부모 데이터의 기본키 값이 변경되면, 자식 데이터의 외래키 값을 NULL로 설정.
      • RESTRICT/NO ACTION: 부모 데이터의 기본키 값이 변경되면, 자식 데이터가 참조 중인 경우 변경 금지.

4. 참조 무결성 제약 설정 방법

SQL에서 참조 무결성 정의

CREATE TABLE ParentTable (
    id INT PRIMARY KEY, -- 기본키
    name VARCHAR(50)
);

CREATE TABLE ChildTable (
    id INT PRIMARY KEY,
    parent_id INT, -- 외래키
    FOREIGN KEY (parent_id) REFERENCES ParentTable(id) -- 참조 무결성
    ON DELETE CASCADE -- 부모 삭제 시 자식도 삭제
    ON UPDATE SET NULL -- 부모 업데이트 시 자식의 외래키를 NULL로 설정
);

5. 참조 무결성 위반 사례와 해결

5.1 삽입 시 위반

  • 문제:
    • ParentTableid = 100인 데이터가 없으면 삽입 실패.
  • INSERT INTO ChildTable (id, parent_id) VALUES (1, 100);
  • 해결:
    • ParentTable에 해당 데이터가 먼저 삽입되어야 함:
    • INSERT INTO ParentTable (id, name) VALUES (100, 'Parent Name');

5.2 삭제 시 위반

  • 문제:
    • ChildTableparent_id = 1로 참조 중인 데이터가 있으면 삭제 실패.
  • DELETE FROM ParentTable WHERE id = 1;
  • 해결:
    • ON DELETE CASCADE를 설정하여 부모 삭제 시 자식도 삭제되도록 처리.
    • 또는 참조를 끊기 위해 자식 데이터의 parent_id를 NULL로 설정:
    • UPDATE ChildTable SET parent_id = NULL WHERE parent_id = 1; DELETE FROM ParentTable WHERE id = 1;

5.3 수정 시 위반

  • 문제:
    • ChildTable에서 parent_id = 1로 참조 중인 데이터가 있으면 수정 실패.
  • UPDATE ParentTable SET id = 2 WHERE id = 1;
  • 해결:
    • ON UPDATE CASCADE를 설정하여 부모 데이터 수정 시 자식 데이터도 자동으로 수정.

6. 참조 무결성 관리의 중요성

  1. 데이터 일관성 보장:
    • 부모-자식 관계를 엄격히 유지하여, 잘못된 데이터가 입력되지 않도록 보장.
  2. 데이터 무결성 향상:
    • 외래키 제약 조건을 통해 데이터의 신뢰성을 유지.
  3. 오류 방지:
    • 잘못된 삽입, 삭제, 수정으로 인한 참조 문제를 사전에 방지.
  4. 유지보수 용이성:
    • 테이블 간 관계를 명확히 정의하므로, 데이터베이스 구조가 변경되어도 안정적으로 관리 가능.

7. 정리

작업 참조 무결성 규칙
삽입 외래키 값은 참조하는 기본키 값 중 하나여야 하며, 그렇지 않으면 삽입 실패.
삭제 부모 데이터를 삭제할 경우, 자식 데이터에 대해 CASCADE, SET NULL, RESTRICT 중 하나를 적용.
수정 부모 데이터 수정 시, 자식 데이터의 외래키에 대해 CASCADE, SET NULL, RESTRICT 중 하나를 적용.

참조 무결성은 데이터베이스의 안정성과 신뢰성을 보장하기 위해 필수적인 개념이며, 올바르게 설정하면 데이터 간의 관계를 효율적으로 관리할 수 있습니다.