카테고리 없음

정규화 개요

에리아푸스 2024. 4. 22. 20:52

정규화(Normalization)는 관계형 데이터베이스의 설계 과정에서 데이터의 중복을 줄이고 데이터 무결성을 보장하기 위해 테이블을 구조적으로 변환하는 과정입니다. 정규화는 데이터베이스의 설계가 비효율적이거나 데이터 중복 및 무결성 문제가 발생할 수 있는 경우 이러한 문제를 해결하기 위해 사용됩니다.

정규화는 일반적으로 다음과 같은 여러 단계(정규형)를 통해 수행됩니다:

1. 정규화의 목적

  1. 데이터 중복 최소화: 동일한 데이터가 여러 테이블에 저장되는 것을 방지합니다.
  2. 데이터 무결성 유지: 데이터의 일관성과 정확성을 보장합니다.
  3. 갱신 이상 방지: 데이터 삽입, 삭제, 갱신 시 발생할 수 있는 문제를 예방합니다.

2. 정규형 (Normal Forms)

정규화 과정은 여러 단계의 정규형을 통해 이루어지며, 각 정규형은 데이터베이스의 구조가 특정 무결성 제약 조건을 충족하도록 합니다. 가장 일반적인 정규형은 1NF, 2NF, 3NF, BCNF, 4NF, 5NF입니다.

2.1. 제1 정규형 (1NF)

정의: 테이블의 모든 열이 원자값(atomic values)을 가져야 하며, 반복 그룹이나 배열이 없어야 합니다.

  • 조건:
    • 각 열은 원자성(atomicity)을 만족해야 하며, 즉, 각 열은 더 이상 분해할 수 없는 최소 단위의 값을 가져야 합니다.
    • 각 행은 유일해야 하며, 테이블의 모든 열은 기본 키에 의해 식별될 수 있어야 합니다.

예시:

  • 비정규화된 테이블:학생ID이름과목
    1 김철수 수학, 과학
    2 이영희 영어, 역사, 과학
  • 1NF로 변환된 테이블:학생ID이름과목
    1 김철수 수학
    1 김철수 과학
    2 이영희 영어
    2 이영희 역사
    2 이영희 과학

2.2. 제2 정규형 (2NF)

정의: 테이블이 1NF를 만족하고, 모든 비기본 속성이 기본 키에 대해 완전 함수 종속(fully functional dependency)을 가져야 합니다. 즉, 부분 종속이 없어야 합니다.

  • 조건:
    • 기본 키가 복합 키일 때, 비기본 속성은 기본 키의 모든 부분에 대해 종속적이어야 합니다.

예시:

  • 1NF로 변환된 테이블:학생ID과목교수명
    1 수학 이 교수
    1 과학 박 교수
    2 영어 김 교수
    2 역사 최 교수
    2 과학 박 교수
  • 2NF로 변환된 테이블:
    • 학생 테이블:학생ID이름
      1 김철수
      2 이영희
    • 수업 테이블:과목교수명
      수학 이 교수
      과학 박 교수
      영어 김 교수
      역사 최 교수
    • 학생_수업 테이블:학생ID과목
      1 수학
      1 과학
      2 영어
      2 역사
      2 과학

2.3. 제3 정규형 (3NF)

정의: 테이블이 2NF를 만족하고, 모든 비기본 속성이 기본 키에 대해 이행적 종속(Transitive Dependency)을 가지지 않아야 합니다.

  • 조건:
    • 비기본 속성이 기본 키에 직접 종속적이어야 하며, 비기본 속성 간에 종속성이 없어야 합니다.

예시:

  • 2NF로 변환된 테이블:학생ID과목교수명교수실
    1 수학 이 교수 101호
    1 과학 박 교수 102호
    2 영어 김 교수 103호
    2 역사 최 교수 104호
    2 과학 박 교수 102호
  • 3NF로 변환된 테이블:
    • 학생 테이블:학생ID이름
      1 김철수
      2 이영희
    • 수업 테이블:과목교수명
      수학 이 교수
      과학 박 교수
      영어 김 교수
      역사 최 교수
    • 교수 테이블:교수명교수실
      이 교수 101호
      박 교수 102호
      김 교수 103호
      최 교수 104호
    • 학생_수업 테이블:학생ID과목
      1 수학
      1 과학
      2 영어
      2 역사
      2 과학

2.4. 보이스-코드 정규형 (BCNF)

정의: 테이블이 3NF를 만족하고, 모든 결정자(지정자가 기본 키) 또한 후보 키여야 합니다.

  • 조건:
    • 모든 결정자는 기본 키여야 하며, 비기본 속성이 기본 키의 일부가 아닌 다른 속성에 종속되지 않아야 합니다.

예시:

  • BCNF 변환 예시는 일반적으로 3NF로 충분하지만 복잡한 경우에는 추가적인 분석이 필요합니다.

2.5. 제4 정규형 (4NF)

정의: 테이블이 BCNF를 만족하고, 다치 종속(Multi-Valued Dependency)을 제거해야 합니다.

  • 조건:
    • 테이블의 속성 집합 간에 다치 종속이 없도록 해야 합니다.

예시:

  • 4NF 변환은 데이터 중복을 제거하기 위해 테이블을 추가로 분리합니다. 예를 들어, 한 테이블에서 다치 종속성이 발생하는 경우, 이를 분리하여 다치 종속이 없는 테이블로 변환합니다.

2.6. 제5 정규형 (5NF)

정의: 테이블이 4NF를 만족하고, 조인 종속(Join Dependency)을 제거해야 합니다.

  • 조건:
    • 모든 조인 종속이 후보 키에 의해 설명될 수 있어야 합니다.

예시:

  • 5NF 변환은 조인 종속을 제거하기 위해 복잡한 조인 테이블을 분리합니다.

정규화 과정 요약

  1. 제1 정규형 (1NF): 반복 그룹을 제거하고 원자값으로 변환합니다.
  2. 제2 정규형 (2NF): 부분 종속을 제거합니다.
  3. 제3 정규형 (3NF): 이행적 종속을 제거합니다.
  4. 보이스-코드 정규형 (BCNF): 결정자가 기본 키가 되도록 합니다.
  5. 제4 정규형 (4NF): 다치 종속을 제거합니다.
  6. 제5 정규형 (5NF): 조인 종속을 제거합니다.

정규화는 데이터베이스 설계의 중요한 과정이며, 데이터의 일관성과 무결성을 유지하고, 데이터 중복을 줄이는 데 도움을 줍니다. 정규화의 각 단계는 데이터베이스 구조를 보다 효과적으로 관리할 수 있도록 도와줍니다.