안녕하세요. 이성필 입니다.
오늘은 논리 모델이야기 중에서 정규화.. 라는 것을 주제로 이야기를 해볼가 합니다.

정규화에 대한 정의를 간략히 하기 위해서 잠깐 책, Web 등을 뒤져보았는데...

"정규화는 데이터베이스의 데이터를 구성하는 과정입니다. 여기에는 테이블을 만드는 과정과 일관성 없는 종속성과 중복성을 제거하여 보다 유연한 데이터베이스를 만들고 데이터를 보호하도록 설계된 규칙에 따라 테이블 간의 관계를 설정하는 과정이 포함됩니다."
- http://support.microsoft.com/kb/209534/ko

"불만족스러운 나쁜 릴레이션의 애트리뷰트들을 나누어서 더 작은 좋은 릴레이션으로 분해하는 과정"
- 개인블로거 (정규화|작성자 vtheonev)

"정규화는 논리적 데이터 모델을 일관성이 있고 중복을 제거하여 보다 안정성을 갖는 바람직한 자료구조로 만들기 위한 과정..."
- 데이터아키텍쳐 전문가 가이드 (411 page)

위의 말들이 모두 정규화를 정의하고자 하는 부분에서 나오는 말들입니다.
모두 틀린 말이 아니고, 저도 딱히 어떤것이다 라고 정의를 깔끔하게 만들지 못해서 위의 말들을 인용하였습니다.

다 건너 뛰고... 대부분의 경우 정규화가 진행된 모델이 그렇지 않은 모델보다 성능, 관리, 데이터 무결성, 공간 등에서 모두 우월하게 됩니다.
대부분의 경우라고 한 이유는 그렇지 못한 경우도 존재합니다. 이런 부분은 정규화 뒤 반정규화라는 과정을 통해서 해결하게 됩니다.

데이터베이스를 이루고 있는 테이블들의 정규화된 정도를 정규형(Normal Form) 이라는 용어를 사용하여 표현합니다.
아래처럼 단계가 있으며, 제1 정규형이 가장 기본적인 정규형입니다.
제1 정규형 (First normal form,1NF)
제2 정규형 (2NF)
제3 정규형 (3NF)
보이스-코드 정규형 (BCNF)
제4 정규형 (4NF)
제5 정규형 (5NF)
도메인/키 정규형 (DKNF)
제6 정규형 (6NF)

이 중에서 도메인/키 정규형 (DKNF), 제6 정규형 (6NF) 는 저에게 매우 생소합니다. (--;)
제가 그리고.. 실제 현업에서 주로 사용하는 것은 제3 정규형까지 입니다. 
(다 확인해 본 것은 아니고... 제가 사용했던 경험과 책에서 이야기가 그렇다라는 것입니다.)

그래서 제3 정규형까지 정의를 소개합니다.

제1 정규형 (1NF) : 모든 속성은 반드시 하나의 값을 가져야 한다.
제2 정규형 (2NF) : 1정규형을 만족하며, 식별자가 아닌 모든 속성은 식별자 전체 속성에 완전 종속되어야 한다.
제3 정규형 (3NF) : 2정규형을 만족하며, 식별자를 제외한 나머지 속성들은 모두 독립적이다.

위 처럼 이야기 합니다.
살짝 소개만 하고... 
자세한 의미를 설명하는 것은 너무나 긴 이야기가 될 것 같아서 나중으로 미루려고...합니다. ^^;

저의 경우는 위의 정의를 주로 정규형 확인을 하는데 많이 사용합니다.
대부분의 경우 요구조건이 간략하기 때문에 테이블 설계를 할 경우 정규화를 단계별로 하지 않고.. 3정규형으로 바로 설계가 됩니다.
물론 요구사항이 길고 복잡하면.. 정규화 단계 및 모델링 단계를 거치겠지만, 그렇지 않은 경우...
테이블들이 그래도 3정규형까지는 만족을 하는지.. 확인하는 정도로 사용됩니다.

다른 분들은 어떠신가요?
정규화... 
잘 지켜고 계신가요??
어느 정도까지 적용시키시나요??




profile