본문 바로가기
My Image
프로그래밍/DataBase

[DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form)

by Lim-Ky 2018. 10. 31.
반응형




1. 정규화


정규화란.. 논리적 설계 단계에서 발생할 수 있는 종속으로 인한 삭제,갱신,삽입 이상(Anomaly)현상의 문제점을 해결하기 위해, 속성들 간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해하는 과정을 말합니다.


이렇게 정규화된 결과를 정규형이라고 부르며, 정규형의 종류로는 제1정규형, 제2정규형, 제3정규형, BCNF, 제4정규형, 제5정규형으로 부릅니다.


중복을 최대한 제거하기 위해 테이블을 분해하는 것을 정규화라고도 합니다.

하지만, 테이블이 많아진다는 것은 어떤 여러개의 정보를 얻기 위해 여러개의 테이블에 산재되어 있는 데이터 값들을 참조해서 조합해야 한다는 것을 의미합니다. 즉 많은 조인현상이 일어나고 이는 조회기능의 퍼포먼스를 저하시킬 수 있습니다. 하지만, 데이터의 정합성과 이상현상을 해결하기 위해 적절하게 정규화를 하는 것은 굉장히 중요합니다.


이번 시간은 제 1정규형에 대해 알아보도록 하겠습니다.


1) 제1정규형(1NF: First Normal Form)


제 1정규형은 한 릴레이션을 구성하는 모든 도메인이 원자값(Atomic Value)만으로 구성되도록 하는 정규형을 말합니다. 


*원자값 : 더이상 쪼개지지 않는 단위(업무적인 의미로..)


-> 즉, 한 사람의 이름은 성과 이름으로 구성되어 있다. 만약 업무상으로 성과 이름을 나눠서 저장해야한다면 '임경호' 라는 데이터는 원자값을 만족하지 않는 것이다. '임' 과 '경호' 를 따로 저장해야 원자값을 만족할 수 있다.

또 하나의 예를 들어보자. 임경호 생일은 19910617이다 여기서 생년,월,일 모두 포함되어 있는 데이터 값이다. 만약 업무상으로! 생년,월,일을 모두 합친 것을 하나의 원자값으로 봐도 무방하다면! 19910617 이란 데이터는 원자값을 만족하는 것이다. 즉, 원자값은 업무적인 의미로 데이터 값을 더 쪼갤수도 안 쪼갤수도 있는 것이다. 모든 시스템의 절대적인 기준은 없다. 각 시스템에 적합한 단위로 원자값이 정해진다.


제 1정규형에 대해서 이제 알아보자!



보험사직원이 자신의 고객을 등록한다고 치자, 위와 같이 고객을 등록했다. 



하지만, 고객이 여러개의 연락처를 가지고 있어서 위와 같이 고객을 등록했을 경우 이는 원자값을 지키지 않고 있다고 한다. 즉 제1정규형에 어긋난다.




따라서, 보험사직원은 위와 같이 전화번호 컬럼 1,2,3을 두어 전화번호를 등록했다고 치자. 하지만 여기도 문제점이 있다. 불필요하게 NULL 값이 들어가게 된다. 또한 전화번호1,2,3은 완전하게 동일한 의미를 가지는 컬럼이다. 또한 행을 인위적으로 나눌경우 아래와 같은 문제점이 발생된다.


1. 테이블 질의시 어려움! 어느 고객이 어떤 전화번호를 가지고 있는가 , 어떤 고객들끼리 같은 전화번호를 공유하는가 질의에 답하기 어렵다.

2. RDBMS에서 고객-전화번호의 유일성을 확보하기 어렵다. 즉 고객 789가 실수로 Tel No.1값과 Tel No.2값이 동일한 경우 유일성이 깨진다.

3. 전화번호 갯수의 제한. 즉 3개까지만 입력할 수 있다..



결국 보험사직원은 아래와 같이 테이블을 구성한다고 치자.



하지만, 여기서도 하나의 전화번호 컬럼에 여러개의 전화번호가 들어가있는 경우 구분자로 따로 가공을 해서 전화번호를 각각 구해야하기 때문에 번거럽고 가공작업에 따른 공수가 많아진다... 또한, 따로 구분자를 강제로 시스템내에서 처리하지 않는 이상 아무렇게나 입력될 수 있다. 뿐만 아니라, 어떤 고객들이 같은 전화번호를 공유하는가? 같은 질의에는 더욱 답하기 어려워진다. 따라서 우리는 아래와 같이 테이블을 쪼개 정규화를 해서 제1정규형을 만들 수 있다.




위와 같은 디자인은 전화번호들의 중복되는 항목은 나오지 않는다. 대신 고객 ID로 외부 조인이나, 외래키로 사용하여 부모-자식 또는 1대 다 관계를 성립할 수 있다. (참고로 위 디자인은 제2정규형, 제3정규형 또한 만족시킬 수 있다.)


다음시간엔 제 2정규형에 대해서 알아보겠다.



참고 : https://ko.wikipedia.org/wiki/%EC%A0%9C1%EC%A0%95%EA%B7%9C%ED%98%95





반응형

댓글