1. DB 정규화란?
DB 정규화란 삽입/갱신/삭제 시 발생하는 이상현상이 없도록, DB를 재설계하는 것을 말합니다. DB 정규화는 다음의 목적을 가집니다.
- 불필요한 데이터를 제거한다.
- 데이터 저장을 논리적이고 직관적이게 한다.
빠른 이해를 위해 정규화를 하지 않았을 때의 문제점이 무엇인지 간단한 예를 들도록 하겠습니다.
학번 |
주소 |
수강 과목 |
21101002 |
서울 |
C언어 |
21101002 |
서울 |
Java |
21101003 |
중국 |
Java |
- 21101002 학생의 주소가 변경 되었을 때, 2개의 Row를 각각 수정 해주어야합니다. 2개라 크게 안 와 닿을지 모르겠지만, 100개/1000개로 늘어나면 시스템에 과부하를 가져올 것입니다.
- 21101003 학생이 Java 수업을 Drop할 경우, 학적에서 21101003 학생의 정보가 아예 사라집니다.
간단한 예이지만 위와 같은 문제점을 예방하기 위해, 앞으로 배울 4개의 정규화 과정을 배워보도록 합니다.
2. 1NF (1 정규화)
1정규화는 각 행마다 값을 한가지만 가지도록 합니다. 예를 통해 이해해도록 하겠습니다.
학번 | 교수 | 학과 | 과목코드 | 학점 |
---|---|---|---|---|
20800399 | 김,박,정 | 컴퓨터공학 | CSE011101, CSE022202, CSE033303 | A,B,C |
21300758 | 병 | 상담심리 | MEC011101 | A |
21400001 | 이 | 법학 | POD032939 | C |
21500399 | 김 | 컴퓨터공학 | CSE011101 | B |
20800399 학생은 '수강과목' 열에 2가지 값을 가지고 있습니다. 이에 다음과 같이 1정규화 합니다.
학번 | 교수 | 학과 | 과목코드 | 학점 |
---|---|---|---|---|
20800399 | 김 | 컴퓨터공학 | CSE011101 | A |
20800399 | 박 | 컴퓨터공학 | CSE022202 | B |
20800399 | 정 | 컴퓨터공학 | CSE033303 | C |
21300758 | 병 | 상담심리 | MEC011101 | A |
21400001 | 이 | 법학 | POD032939 | C |
21500399 | 김 | 컴퓨터공학 | CSE011101 | B |
결과적으로 정규화를 함으로써, 데이터는 더 증가하였습니다. 이는 데이터의 논리성을 강화하기 위함입니다. 하지만 보이는 바와 같이 데이터가 늘어났습니다. 1정규화로는 아직 갈 길이 멉니다.
3. 2NF
2차 정규화는 완전 함수 종속성을 만드는 것입니다. 즉, 기본키에 속하지 않은 함수들이 모두 기본키에 종속적이어야 합니다.
학번 | 학과 | 지도교수 |
---|---|---|
20800399 | 컴퓨터공학 | 김 |
20800399 | 컴퓨터공학 | 박 |
20800399 | 컴퓨터공학 | 정 |
21300758 | 상담심리 | 병 |
21400001 | 법학 | 이 |
21500399 | 컴퓨터공학 | 김 |
학번 | 과목코드 | 성적 |
---|---|---|
20800399 | CSE011101 | A |
20800399 | CSE022202 | B |
20800399 | CSE033303 | C |
21300758 | MEC011101 | A |
21400001 | POD032939 | C |
21500399 | CSE011101 | B |
4. 3NF
3NF는 이행적함수종속석을 제거함으로써 성립된다. 즉 아래 도표를 보면, '학과'는 '지도교수'와 '학번' 양쪽에 종속된다. 이를 분리시키는 것을 의미한다.
학번 | 학과 |
---|---|
20800399 | 컴퓨터공학 |
21300758 | 상담심리 |
21400001 | 법학 |
21500399 | 컴퓨터공학 |
교수 | 학과 |
---|---|
김 | 컴퓨터공학 |
박 | 컴퓨터공학 |
정 | 컴퓨터공학 |
병 | 상담심리 |
이 | 법학 |
학번 | 과목코드 | 성적 |
---|---|---|
20800399 | CSE011101 | A |
20800399 | CSE022202 | B |
20800399 | CSE033303 | C |
21300758 | MEC011101 | A |
21400001 | POD032939 | C |
21500399 | CSE011101 | B |