이야기박스

Nomalization (정규화) 본문

Computer & Data/Big Data

Nomalization (정규화)

박스님 2018. 10. 25. 14:35
반응형

정규화란?

불필요한 데이터를 없애고, 이로부터 각종 이상현상(Anamolies)들을 방지하는 것입니다.

1NF

원자 값(Atomic Value)을 만족시키는 것입니다.

즉, 각 컬럼에는 1개의 값만을 가지고 있어야 합니다.


< University >

 region

university 

korea 

seoul, kaist, postech

usa 

havard, mit, emory 


이러한 테이블을


< University >

 region

university 

korea 

seoul 

korea 

kaist 

korea 

postech 

usa 

havard 

usa 

mit 

usa 

emory 


이런식으로 한개의 로우에는 하나의 값만을 가지도록 하는게 1차 정규화 과정입니다.

로우 수가 늘어난다는 단점이있네요.. 하지만 논리 구조를 잡는게 더 중요하다고 생각됩니다.

2NF

완전 함수적 종속을 만족하는 단계입니다.

말이 어려운데요, 예를 들어보겠습니다.


3개의 컬럼이 있다고 가정하겠습니다.

< Student - class >

student

class 

id 

park

science

1111 

park

math 

1111 

park

computer

1111 

kim

math 

2222 

kim 

science 

2222 

lee

science 

3333 

lee 

computer 

3333 



여기서 student와 class가 기본키입니다.

위 테이블을 보면 student와 class 모두가 있어야, 로우를 구분할 수 있습니다.

하지만 id를 보면 student에만 종속되어 있기때문에, id가 중복으로 입력되는 상황은 불필요한 상황이라고 판단할 수 있습니다.


이에 테이블을 정규화하면,

< Student >

student 

id 

park 

1111 

kim 

2222 

lee

3333 


< Class >

 student

class 

park 

science 

park 

math 

park 

computer 

kim

math 

kim 

science 

lee 

science 

lee 

computer 


이처럼 나눌 수 있습니다. 이러한 과정을 2차 정규화 과정이라고 합니다.

3NF

3차 정규화는 기본키를 제외한 속성들간의 이행적 함수 종속이 없는 것을 의미합니다.

예를 들자면,


< student >

student 

id 

country 

city 

street 

zip 


<student> 테이블에 위와 같은 column이 있다고 가정해보겠습니다. 기본키 하나로 이루어진 2차 정규화된 테이블이지만, zip 컬럼을 통해 country, city, street가 종속됨을 확인할 수 있습니다. 이러한 경우 테이블을 두개로 나눔으로서 해결할 수 있습니다.


< student >

student 

id 

zip 


< address >

zip 

country 

city 

street 

마무리하며

실제 현업에서는 무조건 정규화한다고 효율이 증가하지는 않다고 합니다. 그래도 정규화가 어떤식으로 동작하는 정도는 알고 넘어가야 하지 않을까요?

반응형