CS/데이터베이스

정규화 (Normalization)

sun._.ny 2022. 7. 16. 15:39

정규화(Normalization)란?

 

관계형 데이터베이스(RDBMS)의 설계에서 데이터의 중복을 줄이고, 무결성을 향상시키는 기법을 정규화라고 한다.

 

정규화된 결과를 정규형이라고 하며, 정규형은 기본 정규형과 고급 정규형으로 나뉜다.

 

  • 기본 정규형 : 제1정규형, 제2정규형, 제3정규형, BCNF(보이스/코드 정규형)
  • 고급 정규형 : 제4정규형, 제5정규형

 

 

 

 

 

 

 

 

정규화의 목적

  1. 데이터의 중복을 없애며, 불필요한 데이터를 최소화시킴
  2. 무결성을 지키고, 이상 현상을 방지
  3. 테이블 구성을 논리적이고 직관적으로 할 수 있음
  4. 데이터베이스 구조 확장에 용이해짐

 

* 이상현상이란?

https://ynsseon.tistory.com/11

 

이상 현상 (Anomaly)

이상 현상(Anomaly)이란? 데이터베이스 정규화를 수행하지 않아, 테이블 간의 중복 데이터가 발생하며 데이터 무결성이 저하되는 현상 * 데이터 무결성이란, 데이터가 항상 정확한 값을 유지하려

ynsseon.tistory.com

 

 

 

 

 

 

 

 

 

 

 

정규화 유형

 

1) 제 1정규화 (1NF)

  - 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시킨 형태

 

 

 

 

 

 

 

 

 

2) 제 2정규화 (2NF)

  - 제 1정규화를 진행한 테이블에서 완전 함수 종속을 만족하도록 테이블을 분리시킨 형태

  - 완전 함수 종속이란, 기본키의 부분집합이 결정자가 되어선 안된단 것을 의미

 

* 결정자란, 다른 속성을 고유하게 결정하는 하나 이상의 속성을 의미

 

 

▶ 해당 테이블의 기본키는 (환자번호, 진료과) 복합키

▶ (환자번호, 진료과) 는 진료비를 결정

▶ 동시에 기본키인 (환자번호, 진료과)의 부분집합인 `진료과` 가 진료실을 결정하는 결정자

 

 

따라서, 테이블을 두개로 분해하여 제 2정규형을 만족시킬 수 있음

 

 

 

 

 

 

 

 

 

3) 제 3정규화 (3NF)

  - 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리시킨 형태

  - 이행정 종속이란, A → B 이고 B → C 이면 A → C를 만족한다는 것을 의미

 

 

▶ 위와 같은 테이블의 경우는 환자번호 → 진료과 → 진료실의 형태이기 때문에 (환자번호, 진료과) 와 (진료과, 진료실) 형태의 두 개의 테이블로 분리해야 함

 

 

이행적 종속을 제거하는 이유 : 환자번호 1001의 진료과가 피부과로 바뀔 경우 진료실 정보도 변경되어야 하며 데이터 불일치가 발생할 수 있음. 진료실 컬럼의 데이터를 직접 수정해 줄 수도 있지만, 이러한 번거로움을 없애기 위해 제 3정규화를 하는 것

 

 

 

 

 

 

 

 

4) BCNF (보이스/코드 정규형)

  - 제 3정규화를 완료한 테이블에서 모든 결정자가 후보키가 되도록 테이블을 분리한 형태

 

 

▶ 위의 테이블에서 기본키는 (환자번호, 진료과)이고, 이는 담당자를 결정함

▶ 동시에 담당자는 진료과를 결정함

▶ 담당자는 진료과를 결정하는 결정자이지만, 후보키가 아님 (후보키는 튜플을 유일하게 식별할 수 있는 컬럼이어야 함)

 

 

따라서 다음과 같은 테이블 분해를 통해 BCNF를 만족할 수 있음

 

 

 

 

 

 

 

 

5) 제 4정규화 (4NF)

  - BCNF를 만족하면서 다치 종속을 제거한 형태

 

* 하나의 테이블 내의 컬럼 A, B, C가 존재한다고 했을 때 B C 서로 독립적이고, A B C 각각 다중 결정하는 것을 다치 종속이라고 함

 

 

▶ 개발자마다 자격증 값들이 존재하고, 개발자마다 여러 언어 값들이 존재할 경우 이를 다치 종속 관계라고 함

 

 

따라서, 다음과 같은 테이블 분리를 통해 제 4정규형을 만족할 수 있음

 

 

 

 

 

 

 

 

6) 제 5정규화 (5NF)

  - 제4정규형을 만족하면서 조인 종속을 제거한 형태

  - 필요한 데이터가 사라지지 않는 무손실 분해가 되고, 필요 없는 데이터가 생기지 않는 비부가적 분해가 된 릴레이션(테이블)은 제 5정규형을 만족함

 

  • 무손실 조인(↔ 무손실 분해) : 하나의 릴레이션을 여러개의 릴레이션으로 분해한 후, 공통 속성으로 다시 조인했을때 데이터 손실 없이 원래의 릴레이션 그대로 복원할 수 있는 경우
  • 비부가적 조인(↔ 비부가적 분해) : 조인한 결과에 원본 릴레이션에 없던 데이터가 존재하지 않는 경우

 

 

 

 

 

 

 

 

※ 제 5정규형을 만족하게 하면 엔터티가 늘어나 비용이 증가하기 때문에 실제로 적용하는 경우는 드물다

일반적으로 제 3정규형이나 BCNF에 속하도록 릴레이션(테이블)을 분해하여 데이터 중복을 줄이고 이상 현상이 발생하는 문제를 해결한다고 한다