[DB] 데이터베이스 정규화(Normalization)에 대하여

정규화란?

데이터베이스 정규화는 관계형 데이터베이스 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻합니다. 일반적으로 크고 제대로 조직되지 않은 테이블들을 잘 조직된 여러 개의 테이블을 나누는 과정이라고 생각하시면 이해가 쉬울 듯합니다. 이렇게 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하는 것에 그 목적이 있습니다. 

 

  • 불필요하거나 중복되는 데이터(data redundancy)들을 제거한다.
  • 이상현상(Anomly)을 방지한다.
  • 데이터 저장을 "논리적으로" 한다.

 

데이터를 효율적으로 관리하기 위해서는 위의 3가지를 고려하여 데이터모델을 재설계해야 합니다. 이렇게 정규화를 수행하면 비즈니스 로직에 변화가 생기더라도 데이터 모델의 변경을 최소화할 수 있습니다. 

 

 이상현상(Anomaly)이란? 

이상현상(Anomaly)의 종류
삭제 이상 : 데이터 삭제 시 의도와는 상관없이 다른 정보까지 연쇄적으로 삭제되는 현상
삽입 이상 : 데이터 삽입 시 의도와는 상관없이 원하지 않는 값들도 함께 삽입되는 현상
수정 이상 : 데이터 수정 시 의도와는 상관없이 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상

위의 테이블은 정규화를 수행하지 않은 것으로 학과 테이블과 학생 테이블을 하나로 합친 테이블입니다. 만약 위의 테이블에서 새로운 학생이 한명 추가될 때 필요한 학과코드가 없다면 임의의 값을 넣어줘야 합니다. 즉 불필요한 정보가 함께 추가되는 것입니다. 반대로 '컴퓨터공학과'라는 학과를 추가할 때는 학생이 없기 때문에 임의의 값으로 학생의 정보들을 입력해야 합니다. 이러한 문제를 이상현상(Anomlay)이라고 합니다. 

이러한 현상을 해결하기 위해서는 정규화를 수행하여 위와 같이 학생과, 학과 테이블을 나뉘어 관리해주어야 합니다. 이렇게 테이블이 분해되면 학생과 학과 테이블간에 불필요한 데이터를 입력해도 되지 않으므로 중복 데이터가 제거되며 필요한 경우 학과코드로 조인(Join)을 수행하여 하나의 합집합으로 만들어 사용할 수도 있습니다. 

 

 정규화 절차 

정규화 절차 설명
제1정규화 속성(Attribute)의 원자성을 확보하고 원자값이 아닌 도메인을 분해한다.
제2정규화 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
제3정규화  기본키를 제외한 컬럼간의 종속성을 제거한다. 즉 이행 함수 종속성을 제거한다.
BCNF  기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
제4정규화 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.
제5정규화 조인에 의해서 종속성이 발생하는 경우 분해한다.

정규화는 제 1정규화부터 제 5정규화까지 있지만, 실질적으로는 제 3정규화까지만 수행합니다.

 

제1정규화(1NF)

목표 : 기본키를 설정하고, 모든 도메인이 원자값으로 되어 있는 테이블을 만들자

 

 

제1정규화로 해결할 수 없는 문제점

  • 기본키에 부분 함수 종속된 애트리뷰트가 존재함
  • 기본키로 식별되는 개체와 무관한 애트리뷰트가 존재
  • 두가지 상이한 정보가 포함

 

삽입이상
500번 학생의 지도교수가 P4라는 사실의 삽입은 어떤 교과목을 등록하지 않는 한 삽입 불가능

삭제이상
200번 학생이 C123의 등록을 취소하여 이 튜플을 삭제할 경우 지도교수가 P2라는 정보까지 손실됨

갱신이상
400번 학생의 지도교수를 P1에서 P3로  변경할 경우 학번이 400인 4개 튜플의 지도교수 값을 모두 P3로 변경해야 함

 

 

제2정규화(2NF)

목표 : 제1정규화를 만족하면서 키에 속하지 않는 애트리뷰트들은 모두 기본키에 완전 함수 종속하게 만들자

 

※ 부분 함수 종속성이란, 기본키가 2개 이상의 컬럼으로 이루어진 경우에만 발생합니다. 기본키가 하나의 컬럼으로 이루어진다면 제 2정규화는 생략합니다.

 

 

제2정규화로 해결할 수 없는 문제점

삽입이상
어떤 지도교수가 특정 학과에 속한다는 사실의 삽입 불가능

삭제 이상
300번 학생의 튜플을 삭제하면 지도교수가 P3이 컴퓨터공학과에 속한다는 정보를 손실한다.

갱신 이상
지도교수 P1의 소속이 컴퓨터공학과에서 전자과로 변경된다면 학번이 100과 400번인 두 개의 튜플 모두를 변경해야 함

 

 

제3정규화(3NF)

제 3정규화는 이행 함수 종속성을 제거합니다. 이행 함수 종속성이란, 기본키를 제외하고 컬럼간에 종속성이 발생하는 것입니다.

 

목표 : 제2정규화를 만족하면서, 키가 아닌 모든 애트리뷰트들은 기본키에 이행적 함수 종속되지 않게 하자

 

키가 아닌 애트리뷰트 값의 갱신 시 불필요한 부작용(이상) 발생 없음

 

 

 

 

'DB' 카테고리의 다른 글

[DB] MySQL 다운로드 / 설치 방법 (for Windows)  (0) 2020.11.23

댓글

Designed by JB FACTORY