본문 바로가기
정보관리(데이터베이스, DB)/DB

정규화 (1NF, 2NF, 3NF, BCNF, 4NF, 5NF)

by 3604 2025. 9. 6.
728x90

1. 정의

Normalization

관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말한다.

💡 이상 (Anomaly)

정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상을 말한다.

삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly)이 있다.

 

2. 목적

  • 중복 데이터를 최소화하여 테이블 불일치 위험을 최소화한다.
  • 수정, 삭제 시 이상 현상을 방지함으로써 데이터 구조의 일관성을 최대화한다.
  • 데이터 삽입 시 릴레이션의 재구성에 대한 필요성을 줄인다.
  • 효과적인 검색 알고리즘을 생성할 수 있다.

 

3. 정규화 단계

1) 제 1정규화 (1NF)

" 테이블 내의 속성값은 원자값을 가지고 있어야 한다. "

1NF는 다음을 만족해야 한다.

  1. 각 컬럼이 하나의 속성만을 가져야 한다.
  2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
  3. 각 컬럼이 유일한(unique) 이름을 가져야 한다.
  4. 칼럼의 순서가 상관없어야 한다.

 

2) 제 2정규화 (2NF)

" 부분 함수 종속을 제거한다. (완전 함수 종속 관계)"

2NF는 다음을 만족해야 한다.

  1. 제 1정규형을 만족해야 한다.
  2. 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.

💡 부분 함수 종속 (Partial Functional Dependency)

기본키 중에 특정 컬럼에만 종속되는 것을 말한다.

💡 완전 함수 종속 (Full Functional Dependency)

기본키의 부분집합이 결정자가 되어선 안 된다는 것이다.

예시

(학생번호, 과목) 복합키가 기본키라고 하자.
이때 특정 과목의 지도교수는 과목명만 알면 알 수 있다. 즉, 지도교수 컬럼이 (학생번호, 과목)에 종속되지 않고 (과목)에만 종속적이다.

제 2 정규화를 통해 다음과 같이 분리해야 한다.

 

3) 제 3정규화 (3NF)

" 이행 함수 종속을 제거한다. "

3NF는 다음을 만족해야 한다.

  1. 제 2정규형을 만족해야 한다.
  2. 기본키를 제외한 속성들간의 이행 종속성 (Transitive Dependency)이 없어야 한다.

💡 이행 함수 종속 (Transitive Functional Dependency)

A → B, B → C 일 때 A → C 를 만족하면 이행 함수 종속이라고 한다.

예시

ID → 등급, 등급 → 할인율, ID → 할인율 을 만족한다. 즉 이행 함수 종속이 존재한다.

제 3 정규화를 통해 다음과 같이 분리해야 한다.

 

4) 보이스-코드 정규화 (BCNF)

" 결정자가 후보키가 아닌 함수 종속을 제거한다. "

BCNF는 다음을 만족해야 한다.

  1. 제 3정규형을 만족해야 한다.
  2. 모든 결정자가 후보키 집합에 속해야 한다.

예시

위의 테이블은 (학생번호, 과목)이 기본키로 지도교수를 알 수 있다. 그러나 지도교수를 알면 과목을 알 수 있으므로, 지도교수 → 과목 이 종속적이다.
즉, 후보키 집합에 속하지 않은 결정자가 존재하므로 BCNF를 만족하지 않는다.

BCNF를 만족하기 위해서는 다음과 같이 분리하면 된다.

 

5) 제 4정규화 (4NF)

" 다치 종속을 제거한다. "

4NF는 다음을 만족해야 한다.

  1. BCNF를 만족해야 한다.
  2. 다중값 종속(다치 종속)이 없어야 한다.

💡 다치 종속 (Multi-valued Dependency)

같은 테이블 내의 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말한다.
즉, A → B 인 의존성에서 단일 값 A와 다중 값 B가 존재한다면 다치 종속이라고 할 수 있다. 이러한 종속을 A ↠ B 로 표기한다. (다치 종속은 이중 화살표(double arrow) ↠ 로 표기한다.)

다치 종속은 최소 2개의 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.

예시

위의 테이블은 Person ↠ Mobile  Person ↠ Food_Likes 두 가지 의존성을 가지므로 다치 종속이 존재한다.

 

제 4정규화를 통해 다음과 같이 분리할 수 있다.

 

6) 제 5정규화 (5NF)

" 조인 종속을 제거한다. "

5NF는 다음을 만족해야 한다.

  1. 4NF를 만족해야 한다.
  2. 더 이상 비손실 분해를 할 수 없어야 한다.

💡 조인 종속 (Joint dependency)

하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것을 말한다. 조인 종속성은 다치 종속의 개념을 더 일반화한 것이다.

예제

위의 4NF 테이블에 대해 조인 연산을 수행하면 다음과 같은 결과가 나온다.

위의 결과를 보면 제 4정규화를 수행하기 전 데이터와 다른 것을 알 수 있다.
데이터 손실은 없지만 필요없는 데이터가 추가적으로 생겼으므로 5NF를 만족하지 않는다.

제 5정규화를 통해 다음과 같이 분리할 수 있다.



🔖 참고

 

Difference between 4NF and 5NF - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

출처: https://velog.io/@wisdom-one/%EC%A0%95%EA%B7%9C%ED%99%94Normalization

728x90