DAP
[DAP 전문가 가이드] 4.3.3 엔티티 상세화(2)
2025. 4. 29. 17:08

 

 

정규화

- 정규화는 논리적 데이터 모델을 일관성이 있고 중복을 제거하여 보다 안정성을 갖는 바람직한 자료구조로 만들기 위해 여러 단계를 거친다.

- 1차 정규형에서부터 5차 정규형과 BCNF까지 구성되어 있다.

- 대체로 적절하고 일관성을 유지하면서 중복이 없는 논리적 데이터 모델을 구축하는 데에는 흔히 3차 정규형이 사용된다.

 

정규화의 의미

  • 잘 만들어진 데이터 모델이라고 해도 엔티티에 데이터를 삽입, 수정, 삭제할 때 오류가 발생할 개연성을 가지고 있다. 이러한 것들을 변경 이상이라 한다. 여기에는 구체적으로 삽입 이상, 수정 이상, 삭제 이상 등이 있다.
  • 변경 이상이 발생하는 엔티티를 그대로 운용하게 되면 데이터가 신뢰할 수 없는 값들로 채워질 가능성이 있다. 즉, 데이터의 일관성, 무결성을 해칠 가능성이 있다.
  • 정규화 과정을 통해서 변경 이상의 엔티티를 정규화된 엔티티로 변환하게 된다.
  • 입력 이상
    • 별도의 사실이 발생하기 전까지 원하는 데이터를 삽입할 수 없음. 어떤 데이터를 삽입하려고 할 때 불필요하게 원하지 않는 데이터도 함께 삽입된다.
  • 삭제 이상
    • 일부 정보를 삭제함으로써 유지되어야 할 정보까지도 삭제되는 연대 삭제가 발생한다.
  • 갱신 이상
    • 일부 속성 값을 갱신함으로써 원하지 않는 정보의 이상 현상(무결성 파괴, 정보의 모순성)이 발생한다.

정규화의 장점

  • 중복 값이 줄어든다.
  • NULL 값이 줄어든다.
  • 복잡한 코드로 데이터 모델을 보완할 필요가 없다.
  • 새로운 요구 사항의 발견 과정을 돕는다.
  • 업무 규칙의 정밀한 포착을 보증한다.
  • 데이터 구조의 안정성을 최대화한다.

 

정규화 단계

 

1차 정규형(1NF)

  • 정의
    • 모든 속성은 반드시 하나의 값을 가져야 한다. 즉, 반복 형태가 있어서는 안 된다.
    • 각 속성의 모든 값은 동일한 형식이어야 한다.
    • 각 속성들은 유일한 이름을 가져야 한다.
    • 레코드들은 서로 간에 식별 가능해야 한다.
  • 정규화 작업

1차 정규형 예

  • 고객 엔티티의 계약일 속성의 값이 여러 건이 된다면 1차 정규형을 위배하는 것이 된다.
  • 어떤 속성이 다수의 값을 가지고 있다면 M:1 관계의 새로운 엔티티를 추가한다.
  • 관계형 모델에서는 관계 정의상 한 속성이 하나의 값만을 가져야 한다.
  • 비정규형 관계가 관계로서의 모습을 갖추기 위해선 여러 개의 복합적인 의미를 가지고 있는 속성이 분해되어 하나의 의미만을 표현하는 속성들로 분해되어야 한다. 즉, 속성 수가 늘어나야 한다.
  • 비정규형 관계가 관계로서의 모습을 갖추기 위해선 하나의 속성이 하나의 값을 가질 수 있어야 하며, 이 조건을 만족시키기 위해선 로우가 늘어나야 한다.
  • 분석 또는 모델링 진행 과정에서 발생하며, 최종적인 모델링 완성 단계에서는 나올 수 없다.

2차 정규형(2NF)

  • 정의
    • 식별자가 아닌 모든 속성은 식별자 전체 속성에 완전 종속되어야 한다.
    • 기본키가 아닌 모든 컬럼이 기본키에 종속적이어야 2차 정규형을 만족할 수 있다.
  • 정규화 작업

2차 정규형 예

  • 위 그림에서 식별자가 학번+코스코드로 이루어진 학과등록 엔티티에서 학번 속성에 평가코드, 평가내역 속성들이 종속적이다. 그렇기 때문에 2차 정규형을 위반하고 있는 것이다.
  • 위 그림에서 식별자가 학번+코스코드로 이루어진 학과등록 엔티티에서 코스코드 속성에 코스명, 기간 속성들이 종속적이다. 그렇기 때문에 2차 정규형을 위반하고 있는 것이다.
  • 의미상의 주어, 즉 본질식별자를 알아야 식별자 부분 종속인지를 구분할 수 있다.
  • 속성의 의미가 명확해야 종속성을 비교할 수 있다.

3차 정규형(3NF)

  • 정의
    • 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재하면 안 된다.
  • 정규화 작업

3차 정규형 예

 

  • 위 그림에서 학과등록 엔티티에서 평가코드, 평가내역 속성들이 서로 간에 종속적이다. 즉, 평가내역 속성은 평가코드 속성에 종속적이다. 그렇기 때문에 이것은 3차 정규형을 위반하고 있는 것이다.

BCNF 정규형

  • 정의
    • 모든 결정자가 키인 릴레이션이 BCNF이다. 반대로 어떠한 결정자 하나라도 키가 아닌 릴레이션이라면 BCNF가 될 수 없다.
    • 기존의 2차 정규형과 3차 정규형을 보완하려는 목적으로 만들어졌다.
  • 3차 정규형의 문제점
    • 한 릴레이션에 여러 개의 후보키가 있다.
    • 모든 후보키가 적어도 둘 이상의 속성으로 이루어진 복합키이다.
    • 모든 후보키가 적어도 하나 이상의 공통 속성이 포함되는 경우이다.
  • 3차 정규형을 만족하고 BCNF가 아닌 경우
    • 각 속성이 단 하나의 값으로 구성된 경우

M:M 관계 해소

M:M 관계의 의미

  • 실제 업무 중 대부분은 M:M 관계이다.
  • 키 엔티티와 키 엔티티 간에는 대부분 M:M 관계이다. 데이터 모델 상세화 단계에서 M:M 관계가 해소되면서 액션 엔티티가 새롭게 도출되기도 한다.
  • 지속적으로 발생되는 대다수의 엔티티는 M:M 관계이다. 즉, 기업의 업무 내용을 관리하는 데이터는 대부분 이러한 관계에 의해서 생겨난 엔티티라고 볼 수 있다.

M:M 관계 해소의 의미

  • M:M 릴레이션십은 새로운 릴레이션 엔티티를 추가하여 M:1 관계로 변경한다.
  • 연관 실체 엔티티는 M:M 관계 미결 시 간과해 버렸을 추가 업무 규칙 또는 업무 논리를 내포할 수 있다.
  • M:M 관계는 데이터 종속성에 대한 결정을 어렵게 하여, 모델의 논리적 완성과 부분 집합 식별 능력을 제한한다.

M:M 관계 해소 예

 

참조 무결성 규칙 정의

  • 관계 테이블의 모든 외부 식별자 값은 관련 있는 관계 테이블의 모든 주 식별자 값이 존재해야 한다.
  • 실체의 주 식별자와 마찬가지로 외부 식별자도 데이터 무결성에 관한 업무 규칙을 내포하고 있다.
  • 데이터베이스 설계 관점에서 선택하지 말고, 사용자의 업무 규칙에 따라 적절한 규칙을 선택한다.

입력 규칙

자식 실체의 인스턴스를 입력할 때 참조 무결성 규칙의 종류

  • Dependent
    • 대응되는 부모 실체에 인스턴스가 있는 경우에만 자식 실체에 입력을 허용한다.
  • Automatic
    • 자식 실체 인스턴스의 입력을 항상 허용하고, 대응되는 부모 건이 없는 경우 이를 자동 생성한다.
  • Nullify
    • 자식 실체 인스턴스의 입력을 항상 허용하고, 대응되는 부모 건이 없는 경우 자식 실체의 참조키를 Null 값으로 처리한다.
  • Default
    • 자식 실체 인스턴스의 입력을 항상 허용하고, 대응되는 부모 건이 없는 경우 참조키를 지정된 기본 값으로 처리한다.
  • Customized
    • 특정한 검증 조건이 만족되는 경우에만 자식 실체 인스턴스의 입력을 허용한다.
  • No Effect
    • 자식 실체 인스턴스의 입력을 조건 없이 허용한다.

삭제 규칙

부모 실체의 인스턴스를 삭제할 때 사용되는 참조 무결성 규칙의 종류

  • Restrict
    • 대응되는 자식 실체의 인스턴스가 없는 경우에만 부모 실체 인스턴스 삭제를 허용한다.
  • Cascade
    • 부모 실체 인스턴스의 삭제를 항상 허용하고, 대응되는 자식 실체의 인스턴스를 자동 삭제한다.
  • Nullify
    • 부모 실체 인스턴스의 삭제를 항상 허용하고, 대응되는 자식 실체의 인스턴스가 존재하면 그것의 참조키를 Null 값으로 수정한다.
  • Default
    • 부모 실체 인스턴스의 삭제를 항상 허용하고, 대응되는 자식 실체의 인스턴스가 존재하면 그것의 참조키를 기본 값으로 수정한다.
  • Customized
    • 특정한 검증 조건이 만족되는 경우에만 부모 실체 인스턴스의 삭제를 허용한다.
  • No Effect
    • 부모 실체 인스턴스 삭제를 조건 없이 허용한다.