10 정규화

정규화(Normalization)

정규화는 데이터베이스의 중복 데이터를 최소화하고 데이터 무결성을 유지하며 삽입, 갱신, 삭제 시 발생하는 **이상 현상(Anomaly)**을 방지하기 위해 테이블 구조를 체계적으로 분해하는 과정입니다. 정규화는 **정규형(Normal Form)**이라는 규칙을 단계별로 적용하며 진행됩니다.


정규화의 주요 개념

  1. 슈퍼 키(Super Key) 테이블의 각 튜플을 유일하게 식별할 수 있는 속성의 집합입니다.

  2. 후보 키(Candidate Key) 슈퍼 키 중에서 불필요한 속성을 제거해 더 이상 축소할 수 없는 키입니다.

  3. 기본 키(Primary Key) 후보 키 중에서 선택된 키로, 테이블의 주 식별자로 사용됩니다.

  4. 논 프라임 속성(Non-Prime Attribute) 기본 키에 속하지 않는 속성입니다.

  5. 함수 종속성(Functional Dependency) 속성 X의 값이 속성 Y의 값을 결정할 때, Y는 X에 종속된다고 합니다. 예시: X → Y (X가 Y를 결정).

  6. 부분 함수 종속(Partial Dependency) 복합 키 중 일부 속성에만 종속되는 것을 의미합니다.

  7. 이행적 종속(Transitive Dependency) X → Y이고, Y → Z이면 X → Z가 성립하는 종속성을 의미합니다.


정규화 단계

1NF (제1정규형)

규칙: 모든 속성의 값은 단일 값(Atomic)을 가져야 한다.

  • 다중 값, 반복 그룹은 제거해야 합니다.

1NF 위반 예시:

| 고객ID | 이름   | 전화번호           |
|--------|--------|------------------|
| 1      | 홍길동 | 010-1111, 010-2222 |

1NF 적용 후:

| 고객ID | 이름   | 전화번호     |
|--------|--------|------------|
| 1      | 홍길동 | 010-1111   |
| 1      | 홍길동 | 010-2222   |

2NF (제2정규형)

규칙: 1NF를 만족하고, 모든 논 프라임 속성은 기본 키에 대해 완전 함수 종속(Full Functional Dependency)을 만족해야 한다.

  • 부분 함수 종속(Partial Dependency)을 제거합니다.

2NF 위반 예시:

| 수강ID | 학생ID | 과목명   | 교수명   |
|--------|--------|---------|---------|
| 1      | 101    | 수학     | 홍길동   |
| 2      | 101    | 과학     | 김철수   |
  • 과목명 → 교수명 종속성이 존재하며, 복합 키(수강ID, 학생ID) 일부만 종속됩니다.

2NF 적용 후:

  1. 수강 정보 테이블:

| 수강ID | 학생ID | 과목명   |
|--------|--------|---------|
| 1      | 101    | 수학     |
| 2      | 101    | 과학     |
  1. 과목 정보 테이블:

| 과목명   | 교수명   |
|---------|---------|
| 수학     | 홍길동   |
| 과학     | 김철수   |

3NF (제3정규형)

규칙: 2NF를 만족하고, 논 프라임 속성이 다른 논 프라임 속성에 이행적 종속(Transitive Dependency)되지 않아야 한다.

  • 이행 종속을 제거합니다.

3NF 위반 예시:

| 학생ID | 이름   | 학과ID | 학과명   |
|--------|--------|--------|---------|
| 101    | 홍길동 | 10     | 컴퓨터공학 |
| 102    | 김철수 | 20     | 전자공학   |
  • 학과ID → 학과명 이행 종속이 발생합니다.

3NF 적용 후:

  1. 학생 테이블:

| 학생ID | 이름   | 학과ID |
|--------|--------|--------|
| 101    | 홍길동 | 10     |
| 102    | 김철수 | 20     |
  1. 학과 테이블:

| 학과ID | 학과명   |
|--------|---------|
| 10     | 컴퓨터공학 |
| 20     | 전자공학   |

BCNF (Boyce-Codd Normal Form)

규칙: 3NF를 만족하고, 모든 함수 종속에서 결정자(Determinant)는 반드시 후보 키(Candidate Key)여야 한다.

  • 비정상적인 종속성이 남아 있는 경우를 해결합니다.

BCNF 위반 예시:

| 클래스  | 뱅크네임  |
|---------|---------|
| 스타     | 국민은행   |
| 로얄     | 국민은행   |
| 브론즈   | 우리은행   |
  • 클래스 → 뱅크네임 종속성이 존재하지만, 클래스는 후보 키가 아닙니다.

BCNF 적용 후:

  1. 클래스 정보 테이블:

| 클래스  | 뱅크네임  |
|---------|---------|
| 스타     | 국민은행   |
| 로얄     | 국민은행   |
| 브론즈   | 우리은행   |
  1. 원래 테이블에서는 뱅크네임 속성을 제거하고 클래스만 유지합니다.


제4정규형(4NF, Fourth Normal Form)

정의

**제4정규형(4NF)**는 **다치 종속(Multi-Valued Dependency, MVD)**를 제거하는 것을 목표로 합니다. 테이블이 BCNF를 만족하면서, 하나의 속성 값이 다른 여러 속성 값들과 독립적으로 연관될 때 이를 다치 종속으로 간주하고 이를 제거합니다.


다치 종속(Multi-Valued Dependency, MVD)란?

  • 속성 X가 속성 Y와 Z에 대해 독립적인 관계를 가질 때 발생합니다.

  • 이는 X →→ Y와 X →→ Z라는 두 개의 독립적인 다치 종속성을 가진 경우를 의미합니다.

예시:

| 학생ID | 수업       | 취미       |
|--------|-----------|-----------|
| 1      | 수학       | 축구       |
| 1      | 과학       | 축구       |
| 1      | 수학       | 음악       |
| 1      | 과학       | 음악       |
  • 학생ID →→ 수업: 한 학생이 여러 수업을 수강할 수 있습니다.

  • 학생ID →→ 취미: 한 학생이 여러 취미를 가질 수 있습니다.

  • 하지만 수업취미는 서로 독립적입니다.


4NF 위반 문제

위 예시에서는 수업취미가 서로 독립적이므로, 데이터가 불필요하게 중복되어 저장되고 있습니다.


4NF 적용

다치 종속성을 분리하여 테이블을 나눕니다.

  1. 학생-수업 관계 테이블:

| 학생ID | 수업   |
|--------|-------|
| 1      | 수학   |
| 1      | 과학   |
  1. 학생-취미 관계 테이블:

| 학생ID | 취미   |
|--------|-------|
| 1      | 축구   |
| 1      | 음악   |

결과:

  • 각 테이블은 중복 없이 독립적인 정보를 저장하게 되며, 다치 종속성을 제거하여 4NF를 만족합니다.


4NF를 적용하는 이유

  • 다치 종속성을 제거하여 데이터 중복을 줄이고, 삽입, 삭제, 갱신 시 발생할 수 있는 이상 현상(Anomaly)을 방지합니다.


제5정규형(5NF, Fifth Normal Form)

정의

**제5정규형(5NF)**는 **조인 종속(Join Dependency)**을 제거하는 것을 목표로 합니다. 테이블이 4NF를 만족하면서, 모든 관계가 조인으로 정확히 표현될 수 있어야 하며, 조인으로 인해 불필요한 데이터 중복이 발생하지 않아야 합니다.


조인 종속(Join Dependency, JD)란?

  • 테이블을 다시 조합(조인)했을 때 원래의 테이블로 복구할 수 있는 관계를 말합니다.

  • 조인 종속은 데이터가 여러 테이블로 분리될 때 발생할 수 있는 중복 문제를 다룹니다.


5NF 위반 예시

| 학생ID | 과목       | 교수       |
|--------|-----------|-----------|
| 1      | 수학       | 홍길동     |
| 1      | 과학       | 김철수     |
| 2      | 수학       | 홍길동     |
| 2      | 과학       | 김철수     |
  • 여기서 학생ID → 과목, 과목 → 교수라는 관계가 있지만, 학생ID와 교수는 직접적인 관계가 없습니다.

  • 이 관계를 3개의 독립적인 테이블로 분리할 수 있습니다.


5NF 적용

  1. 학생-과목 테이블:

| 학생ID | 과목   |
|--------|-------|
| 1      | 수학   |
| 1      | 과학   |
| 2      | 수학   |
| 2      | 과학   |
  1. 과목-교수 테이블:

| 과목   | 교수   |
|-------|-------|
| 수학   | 홍길동 |
| 과학   | 김철수 |
  1. 학생-교수 테이블 (조인으로 재구성 가능):

| 학생ID | 교수   |
|--------|-------|
| 1      | 홍길동 |
| 1      | 김철수 |
| 2      | 홍길동 |
| 2      | 김철수 |

5NF의 특징

  • 데이터 중복을 완전히 제거합니다.

  • 모든 관계가 조인을 통해 원래의 테이블로 복구될 수 있습니다.


5NF를 적용하는 이유

  • 데이터 모델이 매우 복잡한 경우(예: 다대다 관계) 데이터의 중복을 제거하고 무결성을 보장하기 위해 사용합니다.

  • 그러나 대부분의 실무에서는 4NF까지만 적용하며, 5NF는 특정 상황에서만 필요합니다.

디노멀라이제이션(Denormalization)

정규화는 중복을 최소화하지만, 테이블이 과도하게 분할되면 성능 저하나 조인(Join) 비용이 커질 수 있습니다. 이를 방지하기 위해 중복을 허용하면서 테이블을 병합하는 과정을 디노멀라이제이션이라고 합니다.

Last updated