본문 바로가기
IT만들기/Database

데이터베이스 정규화

by 커피향처럼 2017. 6. 28.

데이터베이스 정규화 (DB 정규화)

데이터베이스 정규화 예제로 간략하게 정규화에 대한 설명을 하겠습니다.

제1 정규화
: 반복되는 필드가 없어야 합니다.

이름 암호 별명1  별명2  별명3
---------------------------------------------
A      12    바보   쪼다    천치
B      13    천재   오버    NULL
C      14    상식   NULL  NULL
D      15    오리   NULL  NULL

위와 같이 이렇게 설계 하지 않고 다음처럼 합니다.

이름  암호
--------------
A       12
B       13
C       14
D       15

id 이름 별명
---------------
1    A   바보
2    A   쪼다
3    A   천치
4    B   천재
5    B   오버
6    C   상식
7    D   오리

이렇게 설계해야 합니다.

제2 정규화 : 중복되는 데이터를 분리해야 합니다.

사번       이름          부서          부서장
---------------------------------------
10101     홍길동       총무과       이부장
10102     고길동       총무과       이부장
10103     박길동       인사과       박부장
10104     최길동       인사과       박부장

위와 같은 구조를 다음과 같이 설계합니다.

사번      이름        부서번호
-------------------------
10101     홍길동          1
10102     고길동          1
10103     박길동          2
10104     최길동          2


부서번호     부서     부서장
--------------------------------
     1         총무과    이부장
     2         인사과    박부장


제3 정규화 : 주 키에 의존적이지 않은 데이터를 분리합니다.

학번    이름    국어점수    국어타입    수학점수  수학타입
-------------------------------------------------------------------------
10101  홍길동   100          전공필수      80         교양선택

위와 같은 구조를 다음과 같이 합니다.

학번  이름 
------------------
10101  홍길동
10102  고길동

과목    타입
------------------
국어   전공필수
영어   교양선택

형태로 바꾸어 줍니다.


정규화의 원칙 : More Table Less Column을 지향합니다.
  - FK 이외에는 중복 컬럼을 허용하지 않아야 함.
=> 이 원칙을 지킬 경우 JOIN의 횟수가 늘어날 가능성이 높으므로
   JOIN횟수를 줄이기 위해서
   아주 많이 일어나는 Query의 속도를 빠르게 하기 위해
   약간의 중복을 허용합니다.

** 정규형 정규화 과정 **
1NF
대부분의 릴레이션이 1NF에 속함. 모든 도메인이 원자 값으로만 되어 있는 것.

2NF
1NF에서 부분적 함수 종속 제거

3NF
2NF에서 이행적 함수 종속 제거

BCNF
3NF에서 결정 & 후보키 제거

4NF, 5NF는 거의 쓸일이 없을 것으로 사료되옵니다.
정규화는 정규화 할 수록 테이블 조회 시 조인을 해야 하기때문에 성능이 떨어지는 부분이 있지만 보통 3정규화까는 합니다. 

 

댓글