본문 바로가기
programing/DB

정규화(Nomalization)

by RedWiz 2017. 7. 28.

정규화 : 관계형 DB 설계에서 중복을 최소화하여 데이터를 구조화 하는 처리 과정


- 제 1 정규화 (같은 컬럼이 중복)

-> 중복제거, 원자값이 되도록 분해

-> 여러 값을 가진 컬럼이 존재할 수 없다.

-> 각 행과 열에는 하나의 값 만 올 수 있다.

: 중복 컬럼이 있다면 따로 하나 만들어서 값 넣음

(이름-주소1-주소2, 이름-전화번호1-전화번호2 => 이름-주소, 이름-전화번호)


- 제 2 정규화 (키가 여러개 인 경우, 한 쪽에만 의존)

-> 1NF 이후, 부분함수종속제거.

-> 모든 키가 아닌 컬럼은 기본 키 전체에 의존적이어야 한다.

-> 기본 키의 일부분에 의존적이어서는 안된다. 

 : 키 두 개중 하나에만 의존적이면 분리

(학번-과목-평가-과목코드-기간 => 학번-과목-평가, 과목-과목코드-기간 )


- 제 3 정규화 (키를 제외한 것들끼리 의존)

-> 2NF 이후 릴레이션 속성들간에 이행적 함수종속 제거.

-> 키가 아닌 컬럼은, 다른 키가 아닌 컬럼에 의존적이어서는 안된다.

 : 키를 제외했을때 컬럼들 끼리 의존적이면 분리

(학번-자격증-자격증번호 => 학번-자격증, 자격증-자격증번호)


*cf. 2와 3은 한 키를 제외하고 나머지 중 종속 관계 인 것 중에 키 있냐 키가 없냐에 따라 구분


----------------------------------------------------------------------------------------


보통은 제 3 정규화까지만 이루어지고 그 외 정규화는 잘 이루어지지 않는다.


----------------------------------------------------------------------------------------


* BCNF (Boyce-Codd Normal Form), 강한 제 3 정규화, 3.5 정규화

-> 모든 결정자가 후보키가 되도록 하는 과정.

-> 결정자가 후보키가 아니면 분해.

(학번-과목-교수 : [학번, 과목]이 키가 되고 교수가 전공을 결정짓는 결정자가 됨.(2,3BF는 만족) -> 교수가 후보키가 되어야 됨 => 학번-과목, 교수-과목)


- 제 4 정규화 

-> 다대다에 대한 해법

-> 다치종속(MVD : Multi-Valued Dependency) 속성이 3개 이상일 경우

cf. MVD : 하나의 속성값과 여러개의 속성값이 종속

-> 제 2 정규화 된 테이블(의존적인 테이블)은 다대다 관계를 가질 수 없다.

(저자-책, 학생-과목)

(레스토랑-피자종류-배달지역 => 레스토랑-피자종류, 레스토랑-배달지역)


- 제 5 정규화 (PJNF)

-> 주어진 테이블보다 더 작은 테이블의 join으로 재구성할 수 없도록 분해 (Join Dependency)

(P:Projection 분해, J:Join 다시 합침)

-> 후보키를 통하지 않은 Join종속 관계 제거

-> 한테이블 안에 키들이 모두 서로 관계

(외판원-브랜드-제품종류 -> 외판원-제품종류, 외판원-브랜드, 브랜드-제품종류)


*cf. 제 4 정규화와 제 5 정규화의 차이는 각 키끼리 관계가 하나라도 있고 없고 차이

'programing > DB' 카테고리의 다른 글

Collation 오류 (JDBC + MariaDB)  (0) 2018.11.07
DAO (Data Access Objects)  (0) 2018.02.09
DDL, DML, DCL, TCL  (0) 2017.07.31