이야기박스
Nomalization (정규화) 본문
정규화란?
불필요한 데이터를 없애고, 이로부터 각종 이상현상(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 |
마무리하며
실제 현업에서는 무조건 정규화한다고 효율이 증가하지는 않다고 합니다. 그래도 정규화가 어떤식으로 동작하는 정도는 알고 넘어가야 하지 않을까요?
'Computer & Data > Big Data' 카테고리의 다른 글
[MariaDB] errno: 150 "Foreign key constraint is incorrectly formed" (1) | 2018.12.11 |
---|---|
What is ORC File Format? (0) | 2018.12.05 |
LMAX Architecture - Disruptor (2) | 2018.10.10 |
Pipeline SDK (Apache Beam & Cloud Dataflow) (0) | 2018.10.10 |
Protocol Buffers (1) | 2018.07.06 |