DAP
[DAP 전문가 가이드] 5.1.2 무결성 설계
2025. 4. 30. 16:32

 

 

데이터 무결성

- 데이터의 정확성, 일관성, 유효성, 신뢰성을 위해 무효 갱신으로부터 데이터를 보호하기 위해 무결성 설계가 필요하다.

 

데이터 무결성 종류

종류 설명
실체 무결성 실체는 각 인스턴스를 유일하게 식별할 수 있는 속성이나 속성 그룹을 가져야 한다.
영역 무결성 컬럼 데이터 타입, 길이, 유효 값이 일관되게 유지되어야 한다.
참조 무결성 데이터 모델에서 정의된 실체 간의 관계 조건을 유지하는 것이다.
사용자 정의 무결성 다양하게 정의될 수 있는 비즈니스 규칙이 데이터적으로 일관성을 유지하는 것이다.

 

 

데이터 무결성 강화 방법

- 데이터 무결성은 데이터 품질에 직접적인 영향을 준다. 프로그램이 완성되고 데이터가 축적된 후 데이터 클린징을 하거나 무결성 방법을 강구할 때는 많은 비용이 발생된다.

- 데이터 품질을 확보하기 위해서는 데이터베이스 구축 과정에서 적정한 무결성 방안을 확보해야 한다.

 

<무결성 강화 방법>

분류 설명
애플리케이션 데이터를 조작하는 프로그램 내에 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 추가함
데이터베이스 트리거 트리거 이벤트 시 저장 SQL을 실행하여 무결성 조건을 실행함
제약 조건 데이터베이스 제약 조건 기능을 선언하여 무결성을 유지함

 

<무결성 강화 방법에 따른 장단점>

 

구분 장점 단점
애플리케이션 - 사용자 정의 같은 복잡한 무결성 조건을 구현함 - 소스코드에 분산되어 관리의 어려움이 있음
- 개별적으로 시행되므로 적정성 검토에 어려움
데이터베이스 트리거 - 통합 관리가 가능함
- 복잡한 요건 구현 기능
- 운영 중 변경이 어려움
- 사용상 주의가 필요함
제약 조건 - 통합 관리가 가능함
- 간단한 선언으로 구현 가능
- 변경이 용이하고 유효/무효 상태 변경이 가능함
- 원천적으로 잘못된 데이터 발생을 막을 수 있음
- 복잡한 제약 조건 구현이 불가능
- 예외적인 처리가 불가능

 

 

실체 무결성

- 실체에서 개체의 유일성을 보장하기 위한 무결성으로 반드시 보장되어야 하므로 프로그램이나 트리거 등을 이용하는 것보다 데이터베이스에서 제공하는 PK 제약 조건과 Unique 제약 조건 등을 이용하여 보장하는 것이 좋다.

  • PK 제약 조건
    • 데이터베이스에서 가장 중요한 무결성 조건으로 식별자 값은 NOT NULL이고 유일해야 한다.
  • UNIQUE 제약
    • 실체 무결성은 식별자 외에 실체 내에 후보키 대상인 UNIQUE 컬럼도 대상이다.

 

영역 무결성

- 컬럼에 적용되어 단일 행의 컬럼 값만으로 만족 여부를 판단할 수 있다.

- 프로그램 소스와 제약 조건을 상호 보완적으로 사용을 하는 것이 효과적이다.

- 프로그램 기능에 의해 유효 값에 대한 검증을 선행하고 추가적으로 제약 조건을 선언하여 무결성을 강화하면 효과적이다.

 

  • 데이터 타입 & 길이
    • 조회 조건이나 비교 연산에 많이 사용되는 컬럼은 문자 데이터 타입으로 정의하고 프로그램에 의해서 유효일자인지를 확인하는 것이 효과적이다.
  • 유효값
    • 컬럼 유효 값에 대한 제약 조건으로 CHECK를 이용한다.
    • CHECK 무결성 제한은 참이 되어야 하는 조건을 명시적으로 정의한다.
  • NOT NULL
    • 숫자 타입의 컬럼은 NOT NULL 제약 조건을 부여하고 기본값으로 '0'을 정의한다.

참조 무결성

- 두 실체 사이의 관계 규칙을 정의하기 위한 제약 조건으로 데이터가 입력, 수정, 삭제될 때 두 실체의 튜플들 사이의 정합성과 일관성을 유지하는 데 사용된다.

- 참조 무결성 제약 조건은 어떤 실체의 튜플이 다른 실체에 있는 튜플을 참조하려면 참조되는 튜플이 반드시 그 실체 내에 존재하여야 한다는 것이다.

 

  • 입력 참조 무결성
    • 복잡한 처리 규칙을 위해 애플리케이션에서 구현한다.
    • 반드시 참조 무결성을 유지해야 하는 경우에는 추가적으로 FK 제약을 사용한다.

<입력 참조 무결성>

구분 설명
DEPENDENT 참조되는 테이블에 PK 값이 존재할 때만 입력을 허용
AUTOMATIC 참조되는 테이블에 PK 값이 없는 경우는 PK를 생성 후 입력
DEFALUT 참조되는 테이블에 PK 값이 없는 경우 지정된 기본값으로 입력
CUSTOMIZED 특정한 조건이 만족할 때만 입력을 허용
NULL 참조되는 테이블에 PK 값이 없는 경우 외부키를 NULL 값으로 처리
NO EFFECT 조건 없이 입력을 허용

 

 

  • 수정/삭제 참조 무결성
    • 부모 식별자가 변경되었을 경우이다.
    • 식별자 값 변경이 없이 데이터가 운영되는 것이 바람직하다.
    • 변경이 불가피한 경우라도 삭제되고 다시 입력되는 규칙을 적용하여 애플리케이션에서 구현한다.

<수정/삭제 참조 무결성>

구분 설명
RESTRICT 참조하는 테이블에 PK 값이 없는 경우 삭제/수정 허용
CASCADE 참조되는 테이블과 참조하는 테이블의 외부키를 연쇄적 삭제/수정
DEFAULT 참조되는 테이블의 수정을 항상 허용하고 참조하는 테이블의 외부키를 지정된 기본값으로 변경
CUSTOMIZED 특정한 조건이 만족할 때만 수정/삭제 허용
NULL 참조되는 테이블의 수정을 항상 허용하고 참조하는 테이블의 외부키를 NULL 값으로 수정
NO EFFECT 조건 없이 삭제/수정 허용

 

 

  • 디폴트 규칙 정의의 필요성
    • 참조 무결성에서 NULL 값을 정의하는 것은 바람직하지 않다.
    • NULL은 알 수 없는 상태이거나 아직 정의되지 않은 상태를 의미한다.
    • NULL 조건은 DEFAULT 조건으로 설계하는 것이 바람직하다.
  • 모델상에서 슈퍼타입-서브타입 관계
    • 삽입 시에는 DEPENDENT, AUTOMATIC 조건을 적용하고, 삭제나 변경 시에는 CASCADE 조건을 적용하는 것이 바람직하다.
    • 참조 무결성은 데이터베이스에서 제공하는 FK를 정의하는 것만으로는 구현이 불가능하다. 따라서 프로그램, 데이터베이스 트리거, FK 제약을 사용해야 한다.
    • 추가적으로 대량의 트랜잭션이 발생하는 데이터베이스 환경에서는 FK 제약 조건 생성 범위를 조정할 필요가 있다.