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

wisdom·2022년 8월 26일
3

Database

목록 보기
3/3
post-thumbnail

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 ↠ MobilePerson ↠ Food_Likes 두 가지 의존성을 가지므로 다치 종속이 존재한다.


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


6) 제 5정규화 (5NF)

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

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

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

💡 조인 종속 (Joint dependency)

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

예제

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

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

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



🔖 참고

profile
백엔드 개발자

0개의 댓글