본문 바로가기
Category/정보처리기사

정규화란? (도부이결다조)

by Corinee 2024. 10. 7.
728x90
반응형

정규화(Normalization)는 데이터베이스 설계에서 데이터의 중복을 최소화하고 데이터 무결성을 보장하기 위해 테이블을 구조화하는 과정입니다. 이를 통해 데이터 수정, 삭제, 삽입 시 발생할 수 있는 문제를 줄이고, 데이터베이스의 효율적인 관리를 가능하게 합니다.

정규화는 여러 단계로 나뉘며, 각 단계는 이전 단계보다 더 엄격한 규칙을 적용합니다. 대표적으로 1차 정규형(1NF)부터 3차 정규형(3NF), 그리고 보이스-코드 정규형(BCNF)까지 주로 사용됩니다. 아래에서 각 단계에 대해 자세히 설명하겠습니다.


1. 1차 정규형 (1NF, First Normal Form)

조건: 각 테이블의 모든 컬럼이 원자값(Atomic Value)을 가져야 합니다.

  • 원자값: 더 이상 나눌 수 없는 하나의 값. 즉, 각 셀에는 하나의 값만 있어야 합니다.
  • 중복된 열이나 반복 그룹을 제거합니다.

예시:

  • 잘못된 테이블 (1NF가 아닌 경우):
  •             학생 ID                                        이름                                                                           과목
    1 홍길동 수학, 과학
    2 이순신 영어, 역사
  • 1NF로 변환:
  •                 학생 ID                                                      이름                                                                        과목
    1 홍길동 수학
    1 홍길동 과학
    2 이순신 영어
    2 이순신 역사

위와 같이 각 셀에 하나의 값만 포함하도록 변경하면 1차 정규형이 됩니다.


2. 2차 정규형 (2NF, Second Normal Form)

조건: 테이블이 1차 정규형에 속하고, 모든 비-기본 키 속성기본 키 전체에 완전 종속되어야 합니다.

  • 기본 키가 여러 컬럼으로 구성된 경우, 비-기본 키 속성이 기본 키의 일부에만 종속되면 부분 종속이 발생합니다. 이러한 부분 종속을 제거해야 2차 정규형이 됩니다.

예시:

  • 잘못된 테이블 (1NF만 만족):
  •                학생 ID                                             과목                                                                    강사 이름
    1 수학 김철수
    1 과학 박영희
    2 영어 이민호
  • 문제점: 학생 ID와 과목을 기본 키로 구성했지만, 강사 이름은 과목에만 종속되어 있습니다. 이는 부분 종속입니다.
  • 2NF로 변환:
    • 학생-과목 테이블:
    •                                 학생 ID                                                                                    과목
      1 수학
      1 과학
      2 영어
    • 과목-강사 테이블:
    •                                       과목                                                                                    강사 이름
      수학 김철수
      과학 박영희
      영어 이민호

위와 같이 비-기본 키 속성(강사 이름)을 분리하여 테이블을 나누면 2차 정규형이 됩니다.


3. 3차 정규형 (3NF, Third Normal Form)

조건: 테이블이 2차 정규형에 속하고, 모든 비-기본 키 속성이 기본 키에만 직접 종속되어야 합니다.

  • 즉, 비-기본 키 속성 간의 이행적 종속을 제거해야 합니다. 이행적 종속이란 A → B, B → C인 경우 A → C로 간접적으로 종속되는 것을 의미합니다.

예시:

  • 잘못된 테이블 (2NF만 만족):
  •      학생 ID                 과목                            강사 이름                                                        강사 전화번호
    1 수학 김철수 010-1234-5678
    1 과학 박영희 010-9876-5432
    2 영어 이민호 010-1357-2468
  • 문제점: 강사 전화번호는 강사 이름에 종속되어 있습니다. 이는 과목이 강사 이름을 결정하고, 강사 이름이 강사 전화번호를 결정하는 이행적 종속입니다.
  • 3NF로 변환:
    • 학생-과목 테이블:
    •                                학생 ID                                                                                     과목
      1 수학
      1 과학
      2 영어
    • 과목-강사 테이블:
    •                                       과목                                                                                     강사 이름
      수학 김철수
      과학 박영희
      영어 이민호
    • 강사-전화번호 테이블:
    •                       강사 이름                                                                             강사 전화번호
      김철수 010-1234-5678
      박영희 010-9876-5432
      이민호 010-1357-2468

위와 같이 이행적 종속을 제거하여 테이블을 분리하면 3차 정규형이 됩니다.


4. 보이스-코드 정규형 (BCNF, Boyce-Codd Normal Form)

  • 조건: 테이블이 3차 정규형에 속하며, 모든 결정자가 후보 키여야 합니다.
  • 3차 정규형보다 더 엄격한 형태로, 일부 3NF를 만족하는 테이블이 특정 상황에서 BCNF를 만족하지 않는 경우가 있습니다.

5. 4차 정규형 (4NF, Fourth Normal Form)

조건

  • 테이블이 BCNF를 만족하고, 다치 종속(Multi-valued Dependency)을 제거해야 합니다.
  • 다치 종속이란 하나의 속성이 여러 다른 속성 집합과 독립적으로 관계를 가질 때 발생합니다.

예시

  • 예를 들어, 한 학생이 여러 과목과 여러 취미를 가질 수 있다고 합시다.
  •             학생 ID                                      과목                                                                           취미
    1 수학 음악 감상
    1 과학 음악 감상
    1 수학 독서
    1 과학 독서
  • 이 테이블에서는 학생 ID와 과목의 다치 종속 관계와 학생 ID와 취미의 다치 종속 관계가 있습니다.
  • 학생 ID와 과목, 학생 ID와 취미 사이의 관계를 각각 독립적으로 관리할 수 있도록 테이블을 분리해야 합니다.

4NF로 변환

  • 다치 종속을 제거하여 다음과 같이 두 개의 테이블로 분리합니다.
  1. 학생-과목 테이블:

                               학생 ID                                                                                             과목

1 수학
1 과학
  1. 학생-취미 테이블:

                    학생 ID                                                                                             취미

1 음악 감상
1 독서

이렇게 독립적인 다치 종속 관계를 분리하면 4차 정규형이 됩니다.

6. 5차 정규형 (5NF, Fifth Normal Form)

조건

  • 테이블이 4차 정규형을 만족하고, 조인 종속(Join Dependency)이 제거되어야 합니다.
  • 조인 종속은 테이블의 분리가 조인으로부터 완전히 무손실로 복원될 수 있는지를 결정하는 것으로, 테이블이 여러 속성들 간의 복잡한 관계를 갖는 경우 발생합니다.
  • 주로 테이블이 다중 값 종속이나 조인을 통해 여러 개로 분리되었다가 다시 합쳐져야 할 때 5NF를 고려합니다.

예시

  • 예를 들어, 한 프로젝트에는 여러 부서가 참여하고, 부서마다 여러 직원이 배정된다고 가정해보겠습니다.
  •                                    프로젝트                                                            부서                                                   직원
    프로젝트1 부서A 직원1
    프로젝트1 부서A 직원2
    프로젝트1 부서B 직원3
    프로젝트2 부서A 직원1
    프로젝트2 부서B 직원4
  • 여기서 복잡한 관계를 갖는 프로젝트-부서-직원의 조합을 테이블로 나누어 표현했을 때, 조인을 통해 무손실로 원래 테이블을 복원할 수 있어야 합니다.

5NF로 변환

  • 이 테이블을 5NF로 분리하면 다음과 같이 여러 테이블로 나누어집니다.
  1. 프로젝트-부서 테이블:

                                                      프로젝트                                                                                             부서

프로젝트1 부서A
프로젝트1 부서B
프로젝트2 부서A
프로젝트2 부서B
  1. 부서-직원 테이블:

                                                부서                                                                                                직원

부서A 직원1
부서A 직원2
부서B 직원3
부서B 직원4
  1. 프로젝트-직원 테이블 (추가적으로 필요한 경우):

                                                      프로젝트                                                                                             직원

프로젝트1 직원1
프로젝트1 직원2
프로젝트1 직원3
프로젝트2 직원1
프로젝트2 직원4

이렇게 복잡한 관계를 최대한 분리하여 무손실 조인이 가능한 형태로 만들면 5차 정규형이 됩니다.

7. 정규화 단계 요약

  • 1NF: 모든 컬럼이 원자값을 가져야 한다.
  • 2NF: 1NF를 만족하고, 모든 비-기본 키 속성이 기본 키 전체에 완전 종속되어야 한다.
  • 3NF: 2NF를 만족하고, 비-기본 키 속성 간의 이행적 종속이 없어야 한다.
  • BCNF: 모든 결정자가 후보 키여야 한다.
  • 4NF: 다치 종속을 제거해야 한다.
  • 5NF: 조인 종속을 제거하여 테이블을 최대한 분리해야 한다.

정규화의 목적

정규화의 주된 목적은 데이터의 중복을 최소화하고, 무결성을 유지하며, 데이터베이스의 구조를 최적화하는 것입니다. 정규화를 잘 수행하면 데이터 삽입, 수정, 삭제 시 발생할 수 있는 이상 현상을 방지하고, 데이터베이스의 효율적인 관리가 가능해집니다.

4NF와 5NF는 데이터베이스의 구조가 매우 복잡하고 대규모인 경우에 주로 사용됩니다. 일반적인 데이터베이스에서는 3NF나 BCNF까지 정규화하는 경우가 많습니다.