[Daily morning study] 데이터베이스 정규화 (1NF, 2NF, 3NF)

#daily morning study

Image


데이터베이스 정규화 (1NF, 2NF, 3NF)

데이터베이스 정규화는 데이터의 중복을 줄이고, 무결성을 높이며, 효율적인 데이터베이스 설계를 위해 필수적인 과정이다. 이 가이드는 첫 번째 정규형(1NF), 두 번째 정규형(2NF), 세 번째 정규형(3NF)에 대해 다룬다.

1. 정규화의 필요성

  • 중복 제거: 동일한 데이터가 여러 장소에 저장되는 것을 방지하여 저장 공간을 절약한다.
  • 무결성 증대: 데이터의 일관성을 유지할 수 있다.
  • 유지관리 용이: 데이터를 수정할 때 한 곳에서만 수정하면 되므로 관리가 쉬워진다.

2. 제1정규형 (1NF)

제1정규형은 테이블의 모든 컬럼이 원자 값을 가져야 하며, 각각의 행이 고유해야 함을 의미한다. 이는 다중값 속성을 제거하고, 각 셀에 하나의 값만을 가지도록 하는 것이다.

예시

다음과 같은 테이블이 있다고 가정해보자.

학생ID학생명수업
1철수수학, 영어
2민수과학
3영희수학, 과학

이 경우 ‘수업’ 컬럼에 다중값이 있다. 1NF로 변환하면 다음과 같다.

학생ID학생명수업
1철수수학
1철수영어
2민수과학
3영희수학
3영희과학

3. 제2정규형 (2NF)

제2정규형은 1NF 상태에서 모든 비주요 속성이 기본 키에 완전 함수적 종속을 가져야 한다. 즉, 기본 키의 일부에만 의존하는 비주요 속성이 없어야 한다.

예시

1NF를 만든 위의 테이블은 여전히 2NF에 적합하지 않다. 이를 해결하기 위해 학생 정보를 별도의 테이블로 분리하자.

학생 테이블

학생ID학생명
1철수
2민수
3영희

수업 테이블

학생ID수업
1수학
1영어
2과학
3수학
3과학

이렇게 분리하면 비주요 속성인 ‘학생명’이 ‘학생ID’에 완전하게 종속되어 2NF를 만족하게 된다.

4. 제3정규형 (3NF)

제3정규형은 2NF를 만족하면서, 모든 비주요 속성이 기본 키가 아닌 다른 비주요 속성에 의존하지 않아야 한다. 즉, 이행적 종속이 없어야 한다.

예시

학생 테이블을 다시 살펴보면, ‘학생ID’가 ‘학생명’을 결정하고, 학생명은 또 다른 속성을 결정할 수 없다면 3NF를 만족하는 상태이다.

이번에는 새로운 테이블을 추가해보자.

학생 테이블

학생ID학생명학년
1철수2학년
2민수3학년
3영희2학년

여기서 ‘학년’은 학생명에 의존한다. 따라서 학년을 학생명에서 분리해야 한다.

학생 테이블

학생ID학생명
1철수
2민수
3영희

학년 테이블

학생ID학년
12학년
23학년
32학년

이로써 모든 비주요 속성은 기본 키에 의해 결정되므로 3NF를 충족하게 된다.

5. 결론

정규화는 데이터베이스 설계에서 중요한 단계로, 데이터의 중복을 최소화하고 무결성을 높이는 작업이다. 1NF, 2NF, 3NF의 과정을 통해 데이터의 관리를 더욱 효율적으로 할 수 있으며, 데이터베이스의 성능 향상에 기여한다. 데이터베이스 설계 시 정규화를 적용하는 것은 필수적이다.