정규화란? 

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스


* 정규화의 목적 

- 중복성 및 종속성 제거 : 유연성 향상, 데이터 보호, 테이블 규칙성, 테이블 간의 관계 설정 

- 데이터베이스 변경시 이상(anomaly)현상 제거 


1) 삽입 이상

삽입 이상


위와 같은 정규화 되지않은 데이터베이스에서 새로운 교수인 C를 데이터베이스에 삽입하려 할 때 그가 아직 맡은 강의가 없기 때문에 강의 코드를 null로 하지 않는 이상 테이블에 추가 할 수 없음 


2) 삭제 이상

삭제 이상


위와 같은 정규화 되지않은 데이터베이스에서 C 교수의 운영체제 과목이 종료되어서 삭제하려고 할 때 그의 강의가 기록된 레코드를 삭제해야 하는데, 교수 레코드 자체가 사라지게 된다.


3) 갱신 이상

갱신 이상


위와 같은 정규화 되지않은 데이터베이스에서 B 교수의 전화번호가 변경되어 레코드를 수정하려 할 때 성공적인 갱신이 이루어지지 않을 수 있다.



☞ 이러한 문제들을 해결하기 위해 테이블의 구성을 논리적으로 변경하는 것을 정규화라고 한다.


* 정규화 과정

비공식적으로 관계형 데이터베이스 테이블이 제 3 정규화가 되었으면 '정규화 되었다' 라고 한다.


제 1 정규화(1NF; First Normal Form) - 중복되는 그룹 제거


정규화 되지 않은 테이블


위와 같은 테이블은 강의명 칼럼에 두개의 값을 가진다. 위 테이블을 제 1 정규화하면 다음과 같다.


제 1 정규화 된 테이블


제 2 정규화(2NF; Second Normal Form) - 부분 함수 종속성 제거

모든 기본 키의 특정 칼럼에 종속된 칼럼을 제거한다. 수강 과목은 이름 또는 학교에 종속되어 있으므로 이를 제거한다.(새로운 테이블 생성)

다음과 같은 테이블있다고 가정한다.


제 1 정규화 된 테이블


위 테이블은 제 1 정규화가 되었지만 여전히 갱신 이상의 위험이 존재한다.(중복성)

위 테이블의 후보 키는 { 이름 } 이 될 수있다. { 학교 }는 오로지 이름에만 종속된다.

이를 제거하면 다음과 같이 테이블을 분리할 수 있다.


제 2 정규화 된 테이블


제 3 정규화(3NF; Third Normal Form) - 이행 함수 족속성 제거

제 2 정규화로 갱신 이상을 제거했지만 그렇지 않은 테이블도 존재한다.

아래 테이블은 학번은 이름에 종속, 성적은 학번과 이름에 종속, 등급은 성적에 종속됨

이를 이행함수 종속성이라 한다.

제 2 정규화 된 테이블


위의 테이블은 중복되는 테이블이 없고, 함수 족속성도없는 제1, 2 정규화가 된 테이블이다.

하지만 여전히 이상현상이 존재한다. 

만약 100점이 A라는 등급을 주고싶지만 학번과 이름이 기본키가 되는 테이블에서 null값을 삽입 할 수 없다. (삽입 이상) 그리고 B등급의 점수를 70점으로 하향하고 싶다면 해당 성적의 학생을 모두 변경해야함.(갱신 이상) 마지막으로 B 학생의 테이블을 삭제한다면? A등급에 해당하는 점수가 모두 삭제된다.(삭제 이상) 이를 해결하는 방법은 아래와 같다.


제 3 정규화 된 테이블


다음과 같이 테이블을 분리하면 간단하게 해결된다.

이외에도 BCNF, 4NF, 5NF, 6NF 등이 있다.(이는 대부분 3NF이다)


오타 및 질문사항은 댓글로 남겨주세요!




to Top