정규화
정규화의 기본 목표는 테이블 간의 중복된 데이터를 허용하지 않는것이다. 중복된 데이터를 허용하지 않음으로서 무결성을 유지할 수 있고, DB의 저장 용량 또한 줄일 수 있다. 이러한 테이블을 분해하는 정규화 단계가 정의되어 있는데, 각 단계를 알아보자
제 1정규화
제 1정규화란 컬럼이 Atomic Value를 갖도록 하는 분해하는 것이다
이름 | 취미 |
---|---|
코지 | 인터넷,게임 |
판다 | 인터넷,음악 |
위 테이블에서 취미라는 컬럼은 한개 이상의 값을 가지고 있다. 여기에 제 1정규화를 적용하면 다음과 같은 표를 얻는다
이름 | 취미 |
---|---|
코지 | 인터넷 |
코지 | 게임 |
판다 | 인터넷 |
판다 | 음악 |
제 2정규화
제 2정규화란 기본키의 부분집합이 결정자가 되지 않도록 분해하는 것이다
다음과 같은 테이블이 있다고 가정하자
학교 | 이름 | 취미 | 학교 위치 |
---|---|---|---|
숭실대 | 코지 | 코딩 | 서대문구 |
경희대 | 코지 | 독서 | 동대문구 |
숭실대 | 판다 | 인터넷 | 서대문구 |
경희대 | 판다 | 음악 | 동대문구 |
여기서 기본키는 (학교, 이름)을 복합키로 가지고 있다. 모든 컬럼이 Atomic한 값을 가지고 있지만, 기본키의 부분집합(학교)이 학교 위치를 결정하는 결정자가 된다 따라서 이를 정규화하면 다음과 같다
학교 | 학교 위치 |
---|---|
숭실대 | 서대문구 |
경희대 | 동대문구 |
학교 | 이름 | 취미 |
---|---|---|
숭실대 | 코지 | 코딩 |
경희대 | 코지 | 독서 |
숭실대 | 판다 | 인터넷 |
경희대 | 판다 | 음악 |
제 3정규화
제 3 정규화란 A->B 이고 B->C 일때, A->C가 성립되지 않도록 분해하는 것이다
구매자 | 물건 | 가격 |
---|---|---|
코지 | 노트북 | 100 |
판다 | 노트북 | 100 |
곰 | 데스크탑 | 50 |
여우 | 노트 | 1 |
위 테이블에서 구매자가 물건을 구매하고, 물건은 가격을 가지므로 이를 정규화 할 수 있다
구매자 | 물건 |
---|---|
코지 | 노트북 |
판다 | 노트북 |
곰 | 데스크탑 |
여우 | 노트 |
물건 | 가격 |
---|---|
노트북 | 100 |
데스크탑 | 50 |
노트 | 1 |