데이터베이스 정규화

 타이틀 입력부분 

데이터베이스 정규화에 대해 알아봅니다.

  • 데이터베이스 설계를 해야할 때, 정규화하여 설계를 해야하는데 학생때 잠깐 배웠었고 실제 서비스되는 application의 0 To Z까지 설계해본적이 없어서 그닥 사용할 일이 없었습니다.
  • 때문에 기억에서 사라진 데이터베이스 정규화가 무엇인지 재학습겸 포스팅합니다.

 

1. 정규화란?

관계형 데이터베이스 설계에서 중복을 최소화하여 데이터를 구조화하는 프로세스를 정규화라고 합니다.

정규화는 이상이 있는(중복 등) 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있습니다.

 

쉽게 말하여 테이블간에 중복된 데이터를 허용하지 않는것에 목표가 있으며 중복된 데이터를 허용하지 않음으로써 무결성을 유지하며 DB 저장용량을 줄이는것에 기여합니다.

 

정규화에는 단계가 정의되어있으며, 테이블을 어떻게 분리함에 따라 정규화의 단계가 달라집니다.

 

2. 정규화의 목적

데이터베이스 데이터 변경시 이상현상을 제거합니다.

  • 같은 정보가 복수개의 행에서 표현되는 현상(갱신,삽입,삭제 이상 등)을 방지합니다.

데이터베이스 구조 확장시 재 디자인을 최소화 하는데 목적이 있습니다.

  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 되는 경우가 있고, 이는 이 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 주며, 응용 프로그램의 생명을 연장시킵니다.

 

3. 제 1 정규화 (1NF)

제 1정규화는 도메인 원자값 이란 조건을 만족해야 합니다.

도메인 원자값을 만족시킨다는 의미는 아래와 같습니다.

1. 반복그룹이 존재하면 안됩니다.
2.모든 행은 식별자로 완전하게 구분되어야 합니다.
이름 좋아하는 음식
김민규 마파두부,짜장면
김다빈 탕수육
김철수 만두

위와같은 테이블이 있을 때, 김민규는 여러개의 음식을 가지고 있기 때문에 제 1정규형을 만족하지 못하고, 이를 해결하기위해 제 1정규화과정을 통하여 분해합니다. 제 1정규화를 진행한 위의 테이블은 밑과 같아집니다.

이름 좋아하는 음식
김민규 마파두부
김민규 짜장면
김다빈 탕수육
김철수 만두

 

4. 제 2 정규화 (2NF)

기본키중에 특정 컬럼에만 종속된 컬럼이 존재하는것을 방지하고 해결하는것을 제 2정규화라고 합니다.

제 1정규화를 진행한 테이블에 대하여 완전 함수 종속을 만족하도록 테이블을 분해하는 것인데 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미합니다.

이름 주문요리 음식점 가격
김민규 마파두부 마춘루 12000원
김민규 짜장면 영춘관 7000원
김다빈 탕수육 미각 30000원
김철수 탕수육 미각 30000원

위와 같은 테이블이 있다고 하면, 이름과 주문요리 2가지의 기본키가 생깁니다.  음식점은 주문요리키에만 종속되어 있기 때문에 2차 정규형에 위배가 됩니다. 때문에 위 테이블을 제 2정규화 과정을 거쳐 아래처럼 만들 수 있습니다.

주문 

이름 주문요리 가격
김민규 마파두부 12000원
김민규 짜장면 7000원
김다빈 탕수육 30000원
김철수 탕수육 30000원

음식점

주문요리 음식점
마파두부 마춘루
짜장면 영춘관
탕수육 미각

 

5. 제 3 정규화 (3NF)

제 2 정규형을 만족하는 상태에서, 이행 함수 종속을 제거하는 정규화를 제 3 정규화 라고 합니다.

고객번호 이름 주문레벨 할인률
1 김민규 5 5%
2 김다빈 2 2%
3 김철수 1 1%

고객번호를 알면 각 컬럼의 속성 값들을 찾아낼 수 있는 고객정보 테이블이 있습니다. 하지만 자세히 들여다보면 주문레벨은 고객번호에 종속되어있고, 할인률은 레벨에 따라 결정됩니다.

 

이처럼 X->Y, Y->Z 일 때, X->Z를 만족해버리면 이행 함수 종속이 발생한다고 합니다. 이를 제거하는것이 제 3 정규화입니다.

제 3 정규화를 거치면 위의 테이블을 다음과 같이 나타낼 수 있습니다.

 

레벨 테이블

주문레벨 할인률
5 5%
4 4%
3 3%
2 2%
1 1%

고객 테이블

고객번호 이름 주문레벨
1 김민규 5
2 김다빈 2
3 김철수 1

이렇게 나뉘게 된다면 제 2정규형을 만족하며 이행함수 종속을 제거한 제 3 정규형의 상태로 바뀌게 됩니다.

 

 

 

마무리

정규화과정을 만족하며 데이터베이스 설계를 하는것이 중요합니다. 

데이터베이스 설계 혹은 ERD관계도를 그리게 된다면, 정규화 과정을 진행하여 만들어 보도록 합니다.