본문 바로가기
데이터베이스

정규화와 정규형

by 시니성 2023. 7. 25.

데이터베이스 테이블 정규화는 효율적인 데이터베이스 설계와 관리를 위한 과정입니다. 

정규화의 목표는 데이터 중복성을 줄이고, 데이터베이스의 무결성과 정확성을 향상시키는 것입니다. 

이는 데이터 추가, 수정, 삭제를 진행할 때 발생할 수 있는 문제들을 예방하기 위함입니다.

정규화는 데이터의 중복을 줄이고 무결성을 유지시켜 줍니다.

정규화는 다양한 단계로 이루어져 있으며, 각 단계를 '정규형'이라고 합니다.

이 정규형에는 1NF(제 1 정규형), 2NF(제 2 정규형), 3NF(제 3 정규형) 등이 있습니다.

각 정규형은 이전 정규형의 요구 사항을 만족하면서 추가적인 요구 사항을 충족해야 합니다.

**1NF (제 1 정규형)**

1NF는 모든 레코드가 유일하게 식별되어야 하며, 각 열(속성)은 원자적(더 이상 분할할 수 없는) 값을 가져야 한다는 요구 사항이 있습니다.

예를 들어, 다음과 같은 테이블이 있다고 가정해봅시다:

학번 이름 과목
1 김이박 수학, 영어
2 박최이 과학, 영어



위의 테이블은 1NF를 만족하지 않습니다.

왜냐하면 '과목' 열에 여러 값을 가진 튜플이 있기 때문입니다. 이 테이블을 1NF를 만족하도록 변경하면 다음과 같습니다:

학번 이름 과목
1 김이박 수학
1 김이박 영어
2 박최이 과학
2 박최이 영어



**2NF (제 2 정규형)**

2NF는 1NF를 만족하면서, 모든 비키(non-key) 속성이 기본 키에 완전 함수적 종속성을 가져야 한다는 요구 사항이 있습니다. 즉, 부분적 종속성을 제거해야 합니다.

아래의 테이블을 보겠습니다:

| 학생ID | 과목 | 선생님 | 선생님 이메일 |
|-----|------|-----|-------|
| 1 | Math | Park | park@email.com |
| 1 | English | Lee | lee@email.com |
| 2 | Science | Kim | kim@email.com |
| 2 | English | Lee | lee@email.com |

학번 이름 과목 선생님 선생님 이메일
1 김이박 수학 김수학 mathkim@email.com
1 김이박 영어 이영어 englee@email.com
2 박최이 과학 최과학 sci-choi@email.com
2 박최이 영어 이영어 englee@email.com



여기서 기본 키는 '학생ID'와 '과목'의 조합입니다. 그런데 '선생님'과 '선생님 이메일'은 '과목'에 부분적으로 종속되어 있습니다. 이는 2NF를 위반하는 것으로, 이를 해결하기 위해서는 테이블을 분리해야 합니다:

*학생과 과목 테이블*

학번 이름 과목
1 김이박 수학
1 김이박 영어
2 박최이 과학
2 박최이 영어

 

*과목과 선생님 테이블*

과목 선생님 선생님 이메일
수학 김수학 mathkim@email.com
영어 이영어 englee@email.com
과학 최과학 sci-choi@email.com
영어 이영어 englee@email.com


**3NF (제 3 정규형)**

3NF는 2NF를 만족하면서, 비키 속성이 다른 비키 속성에 종속되지 않아야 한다는 요구 사항이 있습니다. 

즉, 이행적 종속성을 제거해야 합니다.

아래의 테이블을 보겠습니다:

과목 선생님 선생님 이메일
수학 김수학 mathkim@email.com
영어 이영어 englee@email.com
과학 최과학 sci-choi@email.com
영어 이영어 englee@email.com


여기서 '선생님 이메일'이 '선생님'에 종속되어 있습니다. 이는 3NF를 위반하는 것으로, 이를 해결하기 위해서는 테이블을 분리해야 합니다:

*과목과 선생님 테이블*

과목 선생님
수학 김수학
영어 이영어
과학 최과학
영어 이영어



*선생님 이메일 테이블*

선생님 선생님 이메일
김수학 mathkim@email.com
이영어 englee@email.com
최과학 sci-choi@email.com
이영어 englee@email.com


위의 과정을 통해 정규화를 진행하면 데이터 중복을 줄이고 데이터 무결성을 향상시킬 수 있습니다.

728x90