정규화 Normalization
🙉

정규화 Normalization

Created
Apr 12, 2024 08:28 AM
Last edited time
Last updated April 12, 2024
Tags
CS
Backend
Language
URL

Intro::

테이블 정규화에 대해 알아보자.

정규화란?

💡
데이터베이스 설계에서 정규화(Normalization)는 데이터의 중복을 최소화하고, 데이터 구조를 체계화하여 효율적으로 데이터를 관리할 수 있도록 돕는 과정입니다. 정규화의 주된 목표는 데이터베이스의 무결성과 일관성을 유지하면서 삽입, 삭제, 갱신 이상(insertion, deletion, update anomalies)을 방지하는 것입니다.
 

제1정규형(1NF)

테이블의 모든 컬럼은 원자값을 가져야 하며, 각 컬럼의 값들은 그 컬럼의 도메인에 속하는 단일 값이어야 합니다. 즉, 각 컬럼에는 반복되는 그룹이나 배열을 포함할 수 없습니다.
문제 상황: 한 테이블에 여러 항목이 한 컬럼에 배열 또는 리스트로 저장되어 있음.
  • 테이블 (비정규형):
    • diffCopy code 사용자ID | 이름 | 주문번호 --------|---------|---------------- 1 | 홍길동 | 101, 102 2 | 이순신 | 103
  • 정규형 적용 후 (1NF):
    • diffCopy code 사용자ID | 이름 | 주문번호 --------|---------|------- 1 | 홍길동 | 101 1 | 홍길동 | 102 2 | 이순신 | 103
      각 행과 컬럼이 하나의 데이터만 가지고 있으므로 제1정규형을 만족합니다.

제2정규형(2NF)

제1정규형을 만족하며, 모든 비주요 속성이 기본키에 완전히 함수적으로 종속되어야 합니다. 즉, 부분적 종속이 제거되어야 합니다. 부분적 종속이란 복합 키의 일부에만 종속된 속성을 의미합니다.
문제 상황: 복합 키를 사용할 때, 일부 속성이 키의 일부분에만 의존함.
  • 테이블 (1NF, but not 2NF):
    • diffCopy code 학생ID | 과목 | 교수 | 점수 ------|-------|----------|----- 1 | 수학 | 김교수 | 95 1 | 영어 | 이교수 | 89 2 | 수학 | 김교수 | 88 2 | 영어 | 이교수 | 92
  • 정규형 적용 후 (2NF):
    • 학생과 과목 간의 점수 관리
      • diffCopy code 학생ID | 과목 | 점수 ------|-------|----- 1 | 수학 | 95 1 | 영어 | 89 2 | 수학 | 88 2 | 영어 | 92
    • 과목과 교수 간의 관리
      • diffCopy code 과목 | 교수 -------|------- 수학 | 김교수 영어 | 이교수
      교수는 과목에 종속되므로 별도로 분리하여 제2정규형을 만족합니다.

제3정규형(3NF)

제2정규형을 만족하며, 모든 비주요 속성이 기본키에 이행적으로 종속되지 않아야 합니다. 이행적 종속이란 한 속성이 다른 속성에 간접적으로 종속되는 것을 의미합니다.
문제 상황: 비주요 속성이 다른 비주요 속성에 종속되어 있음.
  • 테이블 (2NF, but not 3NF):
    • diffCopy code 고객ID | 주문번호 | 고객 주소 | 도시 ------|-------|--------------|----- 1 | 101 | 서울시 강남구 | 서울 2 | 102 | 부산시 해운대구 | 부산
  • 정규형 적용 후 (3NF):
    • 고객 정보
      • diffCopy code 고객ID | 고객 주소 | 도시 ------|--------------|----- 1 | 서울시 강남구 | 서울 2 | 부산시 해운대구 | 부산
    • 주문 정보
      • diffCopy code 고객ID | 주문번호 ------|------- 1 | 101 2 | 102
      도시는 고객 주소에 종속되므로 고객 정보에서 관리하고, 주문 정보는 고객ID에 따라 관리하여 제3정규형을 만족합니다.

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

제3정규형을 만족하며, 모든 결정자가 후보키 집합에 속해야 합니다. BCNF는 3NF보다 더 엄격한 조건을 요구하며, 모든 종속이 후보 키에 대한 종속만을 허용합니다.
문제 상황: 제3정규형을 만족하지만, 후보 키가 아닌 결정자에 의해 결정되는 종속성 존재.
  • 테이블 (3NF but not BCNF):
    • cssCopy code 학번 | 과목 코드 | 성적 | 교수 ---------|--------|----|---- 2010001 | CS101 | A | 김교수 2010002 | CS101 | B | 김교수 2010003 | EE101 | A | 이교수
  • 정규형 적용 후 (BCNF):
    • 성적 테이블 (학번과 과목 코드는 성적을 유일하게 결정)
      • cssCopy code 학번 | 과목 코드 | 성적 ---------|--------|---- 2010001 | CS101 | A 2010002 | CS101 | B 2010003 | EE101 | A
    • 과목 교수 테이블 (과목 코드만으로 교수를 결정)
      • diffCopy code 과목 코드 | 교수 --------|---- CS101 | 김교수 EE101 | 이교수
 
 
 

💡
보통 정규화는 1 ~ BCNF 까지만 적용하는 경우가 많다.

제4정규형(4NF)

제3정규형을 만족하며, 다치 종속(multi-valued dependency)을 제거합니다. 다치 종속은 한 속성이 다른 속성에 대해 두 개 이상의 독립된 값을 가질 수 있는 경우를 말합니다.
문제 상황: 다치 종속(multi-valued dependency)이 존재.
  • 테이블 (BCNF but not 4NF):
    • diffCopy code 학생ID | 취미 | 언어 ------|-------|----- 1 | 독서 | 한국어 1 | 요리 | 한국어 1 | 독서 | 영어 1 | 요리 | 영어
  • 정규형 적용 후 (4NF):
    • 학생 취미 테이블
      • diffCopy code 학생ID | 취미 ------|----- 1 | 독서 1 | 요리
    • 학생 언어 테이블
      • diffCopy code 학생ID | 언어 ------|----- 1 | 한국어 1 | 영어

제5정규형(5NF)

모든 조인 종속이 후보 키를 통해서만 만족되어야 합니다.
문제 상황: 조인 종속성이 존재하여 여러 테이블로 분리 후 다시 조합했을 때 원래의 정보를 잃어버리는 상황.
  • 테이블 (4NF but not 5NF):
    • cssCopy code 출판사 | 저자 | 책 제목 -----|------|--------- A | 김작가 | 책1 A | 이작가 | 책2 B | 김작가 | 책3
  • 정규형 적용 후 (5NF): 출판사, 저자, 책 제목 간의 관계가 더 이상 분리될 수 없는 상태로, 위 테이블은 이미 5NF일 수 있습니다. 조인 종속이 후보 키에만 의존하는 경우, 추가적인 분리가 불필요합니다.
 

References::

Loading Comments...