구어체로 설명!
데이터베이스 정규화(Database Normalization)는
정규화의 장점은
일반적으로 1차 정규화(1NF), 2차 정규화(2NF), 3차 정규화(3NF) 등의 단계로 이루어진다.
각 단계에서는 특정 종류의 종속성(dependency)을 제거하여 데이터베이스를 더 정규화된 상태로 만든다.
1차 정규화는 테이블의 각 속성들이 원자값(Atomic Value)을 가지도록 분해하는 과정이다. 각 속성들은 더 이상 중복된 값을 가지지 않게 되며, 각 속성은 하나의 값을 가지게 된다.
비정규화된 상태
주문번호 | 고객명 | 주소 | 상품명 | 가격 |
---|---|---|---|---|
1 | 홍길동 | 서울 | TV | 1000 |
2 | 홍길동 | 서울 | 냉장고 | 2000 |
3 | 김철수 | 부산 | 냉장고 | 1800 |
1차 정규화된 상태
<주문 테이블>
주문번호 | 고객명 | 주소 |
---|---|---|
1 | 홍길동 | 서울 |
2 | 홍길동 | 서울 |
3 | 김철수 | 부산 |
<상품 테이블>
주문번호 | 상품명 | 가격 |
---|---|---|
1 | TV | 1000 |
2 | 냉장고 | 2000 |
3 | 냉장고 | 1800 |
2차 정규화는 1차 정규화를 만족하면서 부분 함수 종속을 제거하는 과정이다.
부분 함수 종속이란 테이블의 기본키가 아닌 속성들이 기본키에 대해 함수적으로 종속되는 것을 의미한다.
비정규화된 상태
학번 | 강의번호 | 강의명 | 교수명 |
---|---|---|---|
101 | 001 | 수학 | 김교수 |
102 | 001 | 수학 | 김교수 |
103 | 002 | 영어 | 박교수 |
2차 정규화된 상태
<학생 테이블>
학번 | 학생명 |
---|---|
101 | 홍길동 |
102 | 김철수 |
103 | 박영희 |
<강의 테이블>
강의번호 | 강의명 | 교수번호 |
---|---|---|
001 | 수학 | 001 |
002 | 영어 | 002 |
<교수 테이블>
교수번호 | 교수명 |
---|---|
001 | 김교수 |
002 | 박교수 |
3차 정규화는 2차 정규화를 만족하면서 이행적 함수 종속을 제거하는 과정이다.
이행적 함수 종속이란 A -> B -> C와 같이 A가 B를 함수적으로, B가 C를 함수적으로 결정하는 경우를 의미한다.
비정규화된 상태
주문번호 | 고객명 | 고객주소 | 제품번호 | 제품명 | 제품가격 |
---|---|---|---|---|---|
001 | 홍길동 | 서울 | P001 | 노트북 | 1000 |
002 | 김철수 | 부산 | P002 | 스마트폰 | 800 |
003 | 박영희 | 대구 | P003 | 테블릿 | 600 |
3차 정규화된 상태
<주문 테이블>
주문번호 | 고객명 | 고객주소 |
---|---|---|
001 | 홍길동 | 서울 |
002 | 김철수 | 부산 |
003 | 박영희 | 대구 |
<제품 테이블>
제품번호 | 제품명 | 제품가격 |
---|---|---|
P001 | 노트북 | 1000 |
P002 | 스마트폰 | 800 |
P003 | 테블릿 | 600 |