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

HYEONG HWAN, MUN/ 10월 18, 2014/ 미분류/ 2 comments

위키피디아를 많이 참조했습니다.

매우 간단하게 요약.

 

먼저 정규화(Normalization)란 무엇일까요?

- 정규화란

관계형 데이터베이스(테이블간에 관계를 맺을 수 있는 상황)에서 중복을 최소화 하기 위해서

데이터를 구조화 하는 작업.

 

 

1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 가 있으며

보통 3NF 가 되었으면 ‘정규화 되었다’ 라고 한다.

하지만 실무에서는 대규모 데이터 처리시 성능(Performance)향상을 위해 정규화를 안쓰거나 낮은 수준의 정규화를 만족하는 경우가 많다.

예를 들어서 어떤 고객의 정보를 2개의 테이블로 나누어 두었다고 했을 때 정보를 불러오려면 2개의 테이블에 각각 접근해야 하므로 부하(load)가 걸린다.
하지만 하나의 테이블에 몰아두었을 경우 당연히 더 빠른 성능을 보장한다. (아래의 그림 1(비 정규화), 그림 2(1NF 정규화) 참고)

 

1NF(First Normal Form) : 행과 열의 순서에 영향을 받지 않으며 (원래 DB 는 영향을 안받는다.), 모든 항목에 값이 있어야하며(NULL 허용안함), 중복 기능 열이 없어야 한다.
e1
<그림 1 : NULL 값도 있으며, 같은 기능을 하는 열(TEL 1, TEL 2, TEL 3)이 있어서 1NF아님>

 

 
e2
<그림 2 : NULL값 없고, 중복 기능열도 없음. 1NF 충족. (이 경우 2NF, 3NF 도 충족하는데 이건 아래에서 다 이해하고 다시 살펴보기 바람>

 

 

 

2NF(Second Normal Form) : 이행적 함수 종속이 있을 경우, 그것을 쪼갬.

즉 정적인 데이터에서 한 필드가 다른 필드를 정의할 수 있을 때
e3
<그림 : 종업원 필드가 근무지 필드에 영향을 준다. 종업원-근무지 를 따로 꺼낼 수 있다. 좀 더 멋지게(어렵게) 표현하자면, 근무지 필드가 종업원 필드에 함수종속적 이므로 분리하여야 한다.>
e4
<그림 : 함수 종속적인 필드를 분리. 2NF 만족(물론 1NF도)>

 

 

3NF(Third Normal Form) : 계산열 제거.

다른 열의 값을 계산해서 해당 필드에 가지고 있다.

mysql, mssql, oracle 모두 가능하다.

계산되는 열은 (개발자의 관점에서 보는 테이블 열에서) 제거한다.
e5
<그림 : 1NF만족. 2NF는 주민등록번호를 따로 분리할 수 있는지 봤는데 PK인 고객번호와 역할이 동일하므로 분리 안되더라. 무튼 2NF도 만족>

이 상황에서 계산 가능한 열을 삭제.

2NF 연결되는 것 분리 후에 3NF 계산할 수 있는 것은 삭제하면 된다.
e6
<그림 : 3 정규화 하는 모습. 삭제된 필드는 계산하여 복구 할 수 있으므로 계산열(계산필드)로 처리하거나 쿼리시 관련 계산을 하면 된다>

 

 

 

자료 참조 :

데이터베이스 정규화 - http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94

제 3 정규화 - http://www.officetutor.com/column/kkk-db/kkk_12.htm

 

2 Comments

  1. 많은 도움 되었습니다.

  2. 좋은글이네요! 잘보고갑니다.

Leave a Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*