출처 : http://blog.lael.be/post/71
데이터베이스 정규화 (DB normalization)
위키피디아를 많이 참조했습니다.
매우 간단하게 요약.
먼저 정규화(Normalization)란 무엇일까요?
– 정규화란
관계형 데이터베이스(테이블간에 관계를 맺을 수 있는 상황)에서 중복을 최소화 하기 위해서 데이터를 구조화 하는 작업.
1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 가 있으며 보통 3NF 가 되었으면 ‘정규화 되었다’ 라고 한다.
하지만 실무에서는 대규모 데이터 처리시 성능(Performance)향상을 위해 정규화를 안쓰거나 낮은 수준의 정규화를 만족하는 경우가 많다.
예를 들어서 어떤 고객의 정보를 2개의 테이블로 나누어 두었다고 했을 때 정보를 불러오려면 2개의 테이블에 각각 접근해야 하므로 부하(load)가 걸린다.
하지만 하나의 테이블에 몰아두었을 경우 당연히 더 빠른 성능을 보장한다. (아래의 그림 1(비 정규화), 그림 2(1NF 정규화) 참고)
1NF(First Normal Form) : 행과 열의 순서에 영향을 받지 않으며 (원래 DB 는 영향을 안받는다.), 모든 항목에 값이 있어야하며(NULL 허용안함), 중복 기능 열이 없어야 한다.

<그림 1 : NULL 값도 있으며, 같은 기능을 하는 열(TEL 1, TEL 2, TEL 3)이 있어서 1NF아님>
<그림 2 : NULL값 없고, 중복 기능열도 없음. 1NF 충족. (이 경우 2NF, 3NF 도 충족하는데 이건 아래에서 다 이해하고 다시 살펴보기 바람>
2NF(Second Normal Form) : 이행적 함수 종속이 있을 경우, 그것을 쪼갬.
즉 정적인 데이터에서 한 필드가 다른 필드를 정의할 수 있을 때

<그림 : 종업원 필드가 근무지 필드에 영향을 준다. 종업원-근무지 를 따로 꺼낼 수 있다. 고상한 말로, 근무지 필드가 종업원 필드에 함수종속적 이므로 분리하여야 한다.>
<그림 : 함수 종속적인 필드를 분리. 2NF 만족(물론 1NF도)>
3NF(Third Normal Form) : 계산열 제거.
다른 열의 값을 계산해서 해당 필드에 가지고 있다.
mysql, mssql, oracle 모두 가능하다.
계산되는 열은 (개발자의 관점에서 보는 테이블 열에서) 제거한다.

<그림 : 1NF만족. 2NF는 주민등록번호를 따로 분리할 수 있는지 봤는데 PK인 고객번호와 역할이 동일하므로 분리 안되더라. 무튼 2NF도 만족>
이 상황에서 계산 가능한 열을 삭제.
2NF 연결되는 것 분리 후에 3NF 계산할 수 있는 것은 삭제하면 된다.

<그림 : 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
'03.업 > 01.자바' 카테고리의 다른 글
spring 파일업로드 (0) | 2020.08.12 |
---|---|
[펌]데이터베이스 정규화 요약 (0) | 2015.01.14 |
단축URL, SNS글보내기 (0) | 2012.05.24 |
HangulTest (0) | 2012.05.16 |
한글인코딩정보 [ 자바의 데이타타입 ] (0) | 2012.05.16 |