4.2 Normalization

4.2 정규화

데이터베이스 정규화는 데이터의 중복을 최소화하고 데이터 무결성을 보장하기 위해 데이터를 구조화하는 과정입니다. ERD(엔티티 관계 다이어그램)을 정규화하는 과정은 보통 다음의 단계로 이루어집니다. 여기서 각 단계는 특정한 규칙을 따르며, 이 규칙을 만족시킬 때 데이터베이스가 그 단계의 정규형을 만족한다고 말합니다. 보통 정규화는 제1정규형(1NF), 제2정규형(2NF), 제3정규형(3NF)까지 수행됩니다.

비정규형 테이블

학생ID
이름
과목

001

홍길동

수학, 과학

002

이순신

영어, 역사

1단계: 제1정규형 (1NF)

조건: 모든 테이블의 컬럼이 원자값(atomic value)을 가져야 합니다. 즉, 각 필드에는 하나의 값만이 포함되어야 합니다.

과정:

  • 하나의 필드에 여러 값이 포함되어 있으면, 이를 분리하여 각 값을 개별적으로 관리합니다.

예시:

  • 비정규형:

    • 학생 (ID, 이름, 과목)

    • 데이터: (001, 홍길동, 수학, 과학)

  • 제1정규형:

    • 학생 (ID, 이름, 과목)

    • 데이터: (001, 홍길동, 수학) (001, 홍길동, 과학)

원자값으로 분리

학생ID
이름
과목

001

홍길동

수학

001

홍길동

과학

002

이순신

영어

002

이순신

역사

2단계: 제2정규형 (2NF)

조건: 1NF를 만족하면서, 부분 함수 종속성을 제거해야 합니다. 즉, 기본 키의 일부에만 종속된 컬럼을 제거하여 별도의 테이블로 분리해야 합니다.

과정:

  • 기본 키의 일부분에만 의존하는 필드를 제거하고, 이를 별도의 테이블로 분리합니다.

예시:

  • 1NF:

    • 학생과목 (학생ID, 과목ID, 과목명, 교수명)

    • 이 테이블에서 과목명교수명과목ID에 종속되어 있습니다.

  • 제2정규형:

    • 학생과목 (학생ID, 과목ID)

    • 과목 (과목ID, 과목명, 교수명)

  • 부분 함수 종속성을 제거하고 과목과 관련된 정보를 분리

학생과목 테이블:

학생ID
과목ID

001

101

001

102

002

103

002

104

과목 테이블:

과목ID
과목명
교수명

101

수학

김수학

102

과학

박과학

103

영어

이영어

104

역사

최역사

3단계: 제3정규형 (3NF)

조건: 2NF를 만족하면서, 이행 함수 종속성을 제거해야 합니다. 즉, 비키(non-key) 컬럼이 다른 비키 컬럼에 종속되지 않도록 합니다.

과정:

  • 하나의 비키 컬럼이 다른 비키 컬럼에 종속되어 있을 경우, 이를 분리하여 별도의 테이블로 이동합니다.

예시:

  • 2NF:

    • 학생과목 (학생ID, 과목ID)

    • 과목 (과목ID, 과목명, 교수명)

    • 여기서 교수명과목ID를 통해 과목명에 종속되어 있습니다.

  • 제3정규형:

    • 학생과목 (학생ID, 과목ID)

    • 과목 (과목ID, 과목명)

    • 교수 (교수명, 과목ID)

  • 이행 함수 종속성을 제거하고 교수와 관련된 정보를 분리

학생과목 테이블:

학생ID
과목ID

001

101

001

102

002

103

002

104

과목 테이블:

과목ID
과목명

101

수학

102

과학

103

영어

104

역사

교수 테이블:

교수명
과목ID

김수학

101

박과학

102

이영어

103

최역사

104

이 과정에서 테이블이 분리됨에 따라 데이터베이스의 무결성이 높아지고 데이터 중복이 줄어듭니다. 정규화는 일반적으로 제3정규형(3NF)까지만 수행되며, 그 이상의 정규형은 특수한 경우에 적용됩니다.

Last updated