its_jh_stroy

정규화(1NF~4NF) 본문

IT Story

정규화(1NF~4NF)

_J_H_ 2025. 2. 16. 15:48

관계형 데이터베이스에서 중복 데이터를 최소화하여 데이터 무결성을 유지하기 위한 작업을 정규화라 한다.

정규화는 테이블을 분해하며 진행되는데, 분해 방식에 따라 정규화 단계가 정해진다.

 

제1 정규화(1NF)

모든 속성은 원자값을 갖는다.

원자값이란 더 이상 나눌 수 없는 개별적인 항목이다.

예를 들어, 수업이라는 속성이 "수학, 과학, 영어"라는 비원자값을 각 과목별로 세 개의 행으로 분리할 수 있다.

제1 정규화를 만족하는 조건으로는 기본 키가 필요하다는 특징이 있다.

 

제2 정규화(2NF) : 부분 종속 제거

1NF를 만족하면서 기본 키의 부분 집합에 의존하는 속성을 제거해야 한다.

복합 키를 가지는 경우, 기본 키의 일부에만 의존하는 속성을 분리하라는 의미이다.

아래와 같이 주문 Id와 상품 Id 필드를 복합 키로 구성하는 테이블이 있다고 가정한다.

고객은 주문 Id에 의존하고, 가격은 상품 Id에 의존한다.

고객과 가격 필드가 일부 키에만 의존하고 있는 상태이다.

따라서 각 항목에 대한 테이블로 분리하고, 두 테이블의 관계를 나타내는 테이블을 구성할 수 있다.

위와 같이 모든 속성이 기본 키를 만족하도록 테이블을 재구성할 수 있다.

 

제3 정규화(3NF) : 이행적 종속 제거

1NF와 2NF를 만족하면서 이행적 종속성을 가지지 않는다.

이행적 종속성이란 키본 키가 다른 속성을 결정하고, 그 속성이 또 다른 속성을 결정하는 것이다.

따라서 모든 속성은 기본 키에만 의존하고, 다른 후보키에는 의존하지 않아야 한다.

아래와 같이 학생 Id를 기본 키로 가지는 테이블이 있다고 가정해 보자.

위 테이블은 아래와 같은 특징이 있다.

- 학생 Id는 과목을 결정한다.

- 과목은 선생님을 결정한다.

선생님이 과목에 의존하며 이행적 종속성이 발생하는 것이다.

이행적 종속성을 없애기 위해서는 선생님이 과목에 의존하지 않도록 선생님 테이블을 별도로 분리해야 한다.

 

제4 정규화(4NF) : 다치 종속 제거

필드가 3개 이상일 때, 다치 종속이 존재하지 않는다.

다치 종속이란 연관 없는 두 속성이 1:N 관계를 가지는 것이다.

아래와 같이 Id, 직업, 취미 필드를 가지는 테이블이 있다고 가정한다.

 

직업과 취미는 관계가 없지만 두 필드는 다치 종속이 되어버린 상태이다.

아래와 같이 테이블을 분리하여 다치 종속을 제거할 수 있다.