정보 처리/데이터 모델링

정규화

본클라쓰 2012. 6. 16. 13:47

 

정규화의 특징

 

정규화는 1972년 E.F CODE 박사에 의해 제안된 정규화 이론으로, 데이터에 대해 수학적인 방법을 사용한 다양한 유형의 검사를 통해 데이터 모델을 좀 더 구조화하고 개선시켜 나가는 절차에 관련된 이론입니다.

 

 

정규화의 특징은 다음과 같이 정리할 수 있습니다. 

 

 ·  적절한 엔티티타입에 각각의 속성들을 배치하고 엔티티타입을 충분히 도출해가는 단계적인 분석 방법이다.

 · 엔티티타입에 속성들이 상호 종속적인 관계를 갖는 것을 배경으로 종속 관계를 이용하여 엔티티타입을 정제하는 방법이다.

 · 각각의 속성들이 데이터 모델에 포함될 수 있고 정규화 원리를 이용하여 데이터를 분석하는데 이용할 수 있다.

 · 현재 데이터를 검증할 수 있고 데이터의 표현 관점에서 엔티티타입을 정의하는데 이용할 수 있다.

 · 엔티티타입을 오브젝트별로 분석하는 방법이 아닌 개별 데이터를 이용한 수학적인 접근 방법을 통해 분석한다.

 

 

정규화는 우선 갱신 이상이 발생하지 않도록 노력하고, 그 다음 효율성을 고려한다. 정규화 과정을 거쳐 중복된 데이터를 제거하고 효율적인 관리를 위해 데이터 모델을 개선합니다. 정규화라는 것은 논리 설계 단계의 ERD의 단점을 보완하고 최대한 데이터 무결성을 지키기 위한 중요한 과정입니다.

 

정규화를 실시하면 자료 저장에 필요한 저장고를 최소화할 수 있고, 각각의 엔티티의 자료의 불일치성을 최소화여 자료의 삽입, 갱신 및 삭제에 따른 이상 현상을 제거하여 자료 구조의 안정성을 최대화 할 수 있습니다.

 

 

 

함수적 종속성

 

함수적 종속성은 정규화 이론의 핵심으로 속성들의 의미를 결정합니다. 결정자라는 속성을 기준으로 종속성을 분석합니다. 결정자는 어떤 속성의 값이 다른 속서의 값을 고유하게 결정할 수 있는 속성을 의미합니다. 예를 들어 사원 릴레이션에서 "사원번호"는 사원 이름을 결정하게 되는 속성입니다. 즉, 결정자라는 것은 주어진 릴레이션에서 다른 속성을 고유하게 결정할 수 있는 하나 이상의 속성을 의미합니다.

 

위의 예처럼 "사원번호"가 사원이름의 결정자이면 "사원이름"이 "사원번호"에 함수적으로 종속한다고 말합니다. 즉, 주어진 릴레이션에서 속성 "사원이름"이 속성 "시원번호"에 함수적으로 종속하는 필요 충분 조건은 각 "사원번호"에 대해 반드시 한 개의 "사원이름"이 대응된다는 것입니다.

 

 

 

정규화의 과정

 

 

1) 1차 정규화

 

원칙 : 엔티티의 모든 속성은 원자값을 가져야 한다.

 

 

릴레이션을 기준으로 속성 값 중에 중복되는 값을 갖는 속성을 따로 분리합니다. 이는 반복되는 속성을 방지하고 일반화시키는 단계입니다.

 

예) 1차 정규화

 

첫 째, 반복되는 속성을 방지합니다. 위 테이블 시험결과 테이블을 일반화시켜 오른쪽 테이블처럼 변경하는 것입니다. 여기서 영어, 영어점수, 국어, 국어점수, 과학, 과학점수는 과목과 점수라는 대표할 수 있는 속성을 부여할 수 있습니다. 따라서 테이블을 오른쪽처럼 변경해야 합니다.

 

두번 째, 속성 값 중 복수의 속성 값을 가지는 경우 복수의 속성을 분리합니다. 예를 들어, 사람이라는 테이블에 "이름, 나이-성별"이렇게 구성되어 있다면 "이름, 나이, 성별"로 분리해야 합니다.

 

 

 

2) 2차 정규화 

 

원칙 - 모든 속성들은 주식별자에 종속적이어야 한다. 

 

 

엔티티를 구분하는 키에 종속적인 데이터만 엔티티타입으로 구성해야 한다. 한 개체에 두 개 이상의 기본키가 있다면 이를 복합키라고 하고, 복합키로 이루어진 테이블은 기본키에 종속적으로 구별해 분리해야 합니다. 

 

이 원칙은 매우 중요합니다. 한 테이블에 PK는 하나만 존재해야 한다는 것입니다. 

 

다른 테이블에서 참조하는 속성의 경우 Not Null 옵션에 참조만 걸어두고 기본키는 테이블당 하나만 존재해야 합니다. 예를 들어 학생 테이블에 "학번, 이름, 나이"라는 속성이 있고, 동아리 테이블에는 "동아리 인덱스(pk), 동아리면, 구분"이라는 속성이 있고, 소속 테이블은 "학번, 동아리 인덱스, 학생명"이라는 속성이 있다면 소속 테이블은 학생 테이블의 학번이라는 값에 종속적입니다. 따라서 소속 테이블은 학번과 학생명이 같이 있으면 안되며 학생명을 제거해야 합니다. 

 

 

3) 3차 정규화

 

원칙 - 다른 속성에 종속적인 속성은 분리되어야 한다. 

 

예를 들어 회원이라는 테이블에 "회원명, 주민등록번호, 성별"이라는 속성이 있습니다. 이 때 성별은 주민등록번호로 추출할 수 있기 때문에 성별 속성을 제거해야 합니다. 즉, 일반 속성이 다른 속성에 종속적이어서 추출할 수 있을 때는 중복과 오류를 방지하기 위해 해당 속성을 제거해야 합니다. 이는 기존의 속성으로부터 추출해 낼 수 있는 속성에서 발생합니ㅏㄷ. 

 

 

4) 4차 정규화(M:N 관계의 해소)

 

 

5) 반정규화

 

반정규화란 정규화를 통해 제거된 중복 데이터를 고의로 입력하는 작업을 말합니다. 정규화가 잘되어 있는 모델의 경우 무결성이 보장되는 장점이 있지만, 정규화가 잘 되어 있을 경우 성능이 오히려 떨어질 수 있습니다. 이 때 성능 자체가 큰 이슈가 되었을 때 반정규화를 통해 성능을 향상시킬 수 있습니다. 

 

정규화와 반정규화는 시스템의 무결성과 성능이라는 두 가지 이슈 사이에 적절한 선택을 통해 균형을 잡았을 때 빛이 나게 됩니다. 정규화는 정합성과 무결성을 보장하는 대신 성능의 저하를 가져올 수 있으며, 반정규화는 성능과 모델의 단순화에 대한 이점이 있지만 무결성 저하로 인해 시스템의 안정성을 해칠 수 있습니다.