3.5 정규형의 종류
1차 정규형
1) 1차 정규형 정의
▶ 모든 속성은 반드시 하나의 값을 가져야 함
▶ 1차 정규화와 관련된 속성은 다가 속성과 복합 속성이 있음
2) 다가 속성(Multivalued Atributes)
▶ 다가 속성은 같은 종류의 값을 여러 개 가지는 속성을 의미함
▶ 위의 그림처럼 전화번호가 여러 개의 값을 가지고 있어 식별자인 고객ID에 종속되지 않으므로 정규화된 엔터티가 아님
▶ 엔터티의 모든 속성은 단일 값을 가져야 하므로, 다가 속성일 경우 별도의 엔터티가 필요함
▶ 위의 내용을 모델로 표현하면 아래와 같이 정규화가 됨
▶ 앞에서처럼 다가 속성을 관리하지 않고 아래와 같이 관리할 수 있다.
▶ 하지만 위 그림은 물리적으로 1차 정규형이지만, 논리적으로 1차 정규형이 아님.
고객이름과 주민등록번호 속성이 중복되었고, 고객ID에 종속되어 이 엔터티는 결국 2차 정규형을 만족하지 못함.
▶ 그러나, 다가 속성이 Fix되어 있을 경우, 성능을 위해 비정규화 모델을 사용할 수 있음
▶ 비정규화 시 중의할 점은, 다가 속성명을 정확히 기입해야 하며(전번_1, 전번_2, 전번_3과 같은 이름 불가), 다가 속성 관점에 따른 인덱스가
많이 필요하고, NULL이 많아 OR 조건을 많이 사용해야 함
3) 복합 속성(Composite Atrributes)
▶ 복합 속성이란 하나의 속성이 여러 개의 속성으로 분리될 수 있는 속성
▶ 복합 속성은 무조건 분해해서는 안되며, 관리 요구사항에 따라 분해해야 함
■ 전체 주소를 하나의 속성에서 관리하지 않고, 분해하면 오히려 불편할 수 있음
■ 하지만, 동을 사용해서 집계한다는 요구사항이 많을 경우 분해해서 사용해야 함
4) 반복 속성
▶ 반복 속성이란 다가 속성 중 하나로 하나의 엔터티에서 다수의 값이 있는 속성이며, 이 또한 분리를 해야 함
▶ 이 엔터티를 분리할 경우 아래와 같이 됨
▶ 다가 속성과 마찬가지로, 속성 개수가 Fix 될 경우 하나의 엔터티에서 관리할 수 있으나, 확장을 할 수 없음
▶ 그러므로, 가급적 확장성을 위해 정규화를 통해 분리를 해야 함
5) 정규형과 비정규형
▶ 비정규형
■ 업무 요건의 변경에 매우 취약하며, 확장성이 떨어짐
■ 인덱스 수가 증가하고 특정 요건 조회 시 SQL이 복잡해짐
■ 엔터티의 속성이 추가될 가능성이 없을 때 사용 가능
■ 속성 레벨로 관리되는 데이터의 자식 엔터티를 가질 수 없음
▶ 정규형
■ 업무 요건의 변경에 유연하며, 확장성이 좋음
■ 인덱스 수가 감소하고, 특정 요건 조회 시 SQL이 단순해짐(하지만 요구사항에 따라 복잡해 질 수 있음)
■ 엔터티의 속성이 추가될 가능성이 존재할 때 사용
■ 로우 레벨로 관리되는 데이터의 자식 엔터티를 가질 수 있음
6) 인스턴스 관점에서 1차 정규형
▶ 속성이 아닌 반복되는 인스턴스를 1차 정규형으로 분리할 경우
▶ 위의 그림에서 고객ID와 주문일자 속성이 중복 데이터이며, 상품코드와 수량은 다가 속성의 성격을 가짐
▶ 다가 속성이 여러 개 존재할 경우, 위의 그림처럼 표현이 가능한데 이를 중첩 릴레이션이라고 함
▶ 하나의 인스턴스 내부에 다시 인스턴스가 존재하는 형태
▶ 주문번호 속성은 릴레이션의 주 식별자이며, 상품코드는 중첩 릴레이션의 주 식별자인 동시에 릴레이션의 부분 주 식별자도 됨
▶ 중첩 릴레이션은 관점에 따라 정규형 위반이 달라짐
■ 중첩 릴레이션 그림의 경우 속성에 하나 이상의 값을 가지고 있으므로, 1차정규형을 위반함
■ 정규형이 아닌 릴레이션 그림의 경우 고객ID와 주문일자 속성이 주 식별자 중에 주문번호에만 종속되므로 2차정규형을 위반함
▶ 이를 정규화하면 위와 같이 나눌 수 있음
7) 엔터티별로 동일한 성격의 속성 존재
▶ 개인고객, 법인고객 엔터티가 존재하고 양쪽 엔터티에 전화번호 속성이 존재하면 값이 다르더라도 반복 속성이 됨
▶ 이상적인 구조는 동일한 성격의 속성은 전사 모델에서 한 번만 존재하는 것이 좋음
2차 정규형
1) 2차 정규형이란?
▶ 2차 정규형은 엔터티의 모든 속성이 후보 식별자 전체에 종속적이어야 함
▶ 만약, 일반 속성 중에 후보 식별자 전체에 종속적이지 않고 후보 식별자를 구성하는 속성 일부에 종속적인 속성이 있을 경우, 이를 분리해야
2차 정규형
▶ 즉, 모든 비식별자 속성은 후보 식별자 속성에 완전함수종속이 되야 하며, 부분함수종속이 될 경우 이를 분리해야 함
▶ 2차정규형은 후보 식별자를 구성하는 속성이 두 개 이상일 경우에만 대상이 되고, 단일 속성으로 후보 식별자가 구성될 경우 대상이 아님
▶ 위 그림의 경우 C 속성은 후보 식별자인 B에만 종속인 부분함수종속이므로, 이를 아래처럼 분리해야 함
2) 2차 정규형 사례
▶ 위 사례에서는 상품명, 단가 속성이 상품코드 후보 식별자에만 부분함수종속이므로, 이를 아래처럼 분리해야 함
▶ 그러나 최근에 성능을 위해 상품명을 상품 엔터티가 아닌 주문상품에 추가로 배치하여 아래처럼 구성하는 경우가 존재함
(주문상품 엔터티에서 상품명으로 조회하는 일이 빈번히 일어나는 경우)
▶ 하지만, 이는 지양해야 하며, 가급적 속성은 한 곳에서만 관리해야 함
3차 정규형
1) 3차 정규형이란?
▶ 3차 정규형은 이행적 종속성과 관련이 있음
■ 이행적 종속성은 X → Y이고 Y → Z이면 X → Z가 성립한다는 내용
■ 3차 정규형은 일반속성(비식별 속성)간의 종속 관계를 분해하면 3차 정규형이 됨
▶ 위의 그림에서 속성 C는 일반속성이면서 속성 D의 결정자
▶ 또한 속성 D는 주 식별자인 A, B에 간접 종속되어 있음
▶ 이 엔터티는 직접적인 함수 종속에 의해 분해해야 하며, 분해되면 아래처럼 분해 가능
▶ 아래의 그림은 고객ID와 고객명이 함수 종속 관계이며, 고객ID를 알면 고객 이름이 하나만 결정되므로 고객명은 고객ID에 종속적인 속성
▶ 일반속성에 종속이 발생했으므로, 아래의 그림처럼 엔터티 분리를 해야 함
보이스코드 정규형
1) 보이스코드 정규형이란?
▶ 보이스코드 정규형이란, 릴레이션에 존재하는 종속자가 후보 식별자일 경우 BC 정규형이 아님
▶ 보이스코드 정규형을 만족하면 3차 정규형이 되지만, 3차 정규형은 만족하여도 보이스코드 정규형이 아닐 수 있음
▶ 예제1의 경우, A, B가 주 식별자인데, 일반속성 C에 종속된 B가 주식별자이므로 BC 정규형에 어긋남.
하지만, 일반속성간에 종속 관계가 없으므로 3차 정규형을 위반하지 않음
▶ 예제2의 경우, 주 식별자는 A 속성 하나이며, B, C는 속성이 후보 식별자인데, 일반속성 D에 종속된 C가 후보식별자이므로 BC정규형에 어긋남
▶ 이를 정규화하면 아래의 그림처럼 분해할 수 있음
2) 보이스코드 정규형 사례
▶ 위 그림은 학생의 학점을 관리하는 엔터티로, 학생은 여러 과목을 수강할 수 있으며, 교수는 한 과목만 강의할 수 있고 여러 교수가 동일과목을
강의할 수 없다고 가정할 경우 폐포는 아래와 같음
■ FD1 : (학생번호, 과목명) → (교수번호, 학점)
■ FD2 : 교수번호 → 과목명
▶ 이 때, FD2의 종속자인 과목명이 FD1의 후보식별자이므로 BC정규형에 어긋남
▶ 이를 BC 정규형으로 분해할 경우 아래와 같이 나옴
▶ 만약, 과목명을 함께 후보식별자로 한다 하더라도, 후보식별자간 종속관계가 되기 때문에 분해해야 함
4차 정규형
1) 4차 정규형이란?
▶ 4차정규형은 다가 종속을 분해하는 작업
▶ 다가 종속이란, 한 릴레이션에 다가 속성이 두 개 이상 존재할 때 발생함
■ 하나의 A값에 대응하는 여러 개의 B 값이 있고, A 값에 대응하는 여러 개의 C 값이 있는 상태에서 B와 C가 관련이 없을 경우 다가 속성 관계
■ 속성 A 하나에 속성 B가 여러 값을 결정하면 A →→ B로 표시하며, A가 B를 다가 결정한다 라고 하고 B가 A에게 다가 종속됐다 라고 함
▶ 홍길동의 기술은 모델링과 튜닝이며, 한국어와 영어를 구사하지만 기술과 언어는 종속 관계가 없음
(모델링을 영어로 할 수 있다는 의미가 아니므로, 기술과 언어는 서로 독립적임)
▶ 이를 방지하기 위해 릴레이션2를 사용해야 하는데, 중복데이터가 많이 발생하여 이 또한 문제가 됨
▶ 아래처럼 1:1로 매칭할 경우 기술과 언어가 서로 종속적인 관계처럼 보이므로 안됨
▶ 그러므로, 다가 종속의 엔터티는 아래와 같이 분해를 해야 함
▶ 4차 정규형은 1차 정규형과 비슷한데, 1차 정규형이 다가 속성을 분해하는 것이고 4차 정규형은 다가 종속을 분해하는 것이므로, 다가 속성을
1차 정규형으로 만들면 자연스럽게 다가 종속 또한 제거됨
▶ 주의할 점은 다가 종속간 관계가 없을 경우에만 4차 정규형을 해야 하며, 관계가 있을 경우 이를 분해하면 안됨
5차 정규형
1) 5차 정규형이란?
▶ 2, 3, BC 정규형은 함수 종속 개념을 기반으로 수행한 것이며, 4차 정규형은 다가 종속 개념을 기반으로 수행함
▶ 하지만 5차 정규형은 조인 종속 개념을 기반으로 하며, 조인 종속이 존재하면 5차 정규화 대상
▶ 5차 정규형 조건 : 무손실 조인과 비부가적 조인을 만족한 엔터티가 5차 정규형
■ 무손실 조인(Lossless Join) : 하나의 엔터를 여러 개의 엔터티로 분해한 후 공통(식별자) 속성으로 조인하여 데이터 손실없이 원래의
릴레이션으로 복원할 수 있는 경우
■ 비부가적 조인(Nonadditive Join) : 조인한 결과에 원래 엔터티에 없는 데이터가 존재하지 않는 경우
▶ 하나의 엔터티를 분해하고 다시 합쳤을 때 원래의 엔터티로 복원할 수 있으면 그 엔터티는 조인종속이 존재하는 엔터티이며, 조인 종속이
존재하지 않을 때까지 분해한 엔터티가 5차 정규형임
2) 5차 정규형 사례
▶ 위 그림은 4차 정규형의 사례지만, 업무요건이 기술과 언어 사이에 관계가 있다고 가정할 경우임
▶ 둘 사이에 관계가 존재하므로 이를 아래처럼 나눌 경우 5차 정규형이 됨
▶ 5차 정규형은 하나의 엔터티에서 관리해 아노말리 현상이 발생하지 않고 관리가 힘들어 실무에서 자주 사용되지 않음
▶ 하지만, 5차 정규형을 이해하고 있어야 정확한 정규화를 할 수 있으며, 만약 아래처럼 4차 정규화를 할 경우 기술과 언어 사이에 관계를
잃어버리므로 반드시 알고 사용해야 함
3) 5차 정규형 도식화
▶ 5차 정규형은 3개체 관계와 연관이 있는데, 위와 같이 3개체 관계는 사원, 기술, 언어 세 엔터티의 주 식별자와 연관된 관계임
▶ 3개체 관계는 일반적으로 세 개의 엔터티로 분해할 수 있으며, 이렇게 분해할 경우 5차 정규형이 됨
▶ 위의 그림은 4정규형과 5정규형을 도식화한 그림이며, 5정규형은 C 엔터티가 필요함
▶ 실제 업무에서는 5정규형을 위반하지만, 3개의 관계 엔터티를 가져가지 않고 하나의 엔터티만 가져가는 경우가 대부분이다.
정규형 요약
구분 |
제거 대상 |
특징 |
1차 정규형 |
다가 속성, 복합 속성, 반복 속성, 중첩 릴레이션 제거 |
속성이 추가되거나 일대다(1:M) 관계의 릴레이션이 추가되며 관계를 상속시킴 |
2차 정규형 |
부분 종속 제거 |
일대다(1:M) 관계의 릴레이션이 추가되며 관계를 상속받음 |
3차 정규형 |
이행 종속 제거 |
일대다(1:M) 관계의 릴레이션이 추가되며 관계를 상속받음 |
BC 정규형 |
종속자가 키(Key)에 포함된 함수 종속 제거 |
모든 결정자는 키(Key)이어야 한다는 관점에서 3차 정규형과 동일 |
4차 정규형 |
다가 종속 제거 |
다가 속성의 개수만큼 일대다(1:M) 관계의 릴레이션이 추가됨 |
5차 정규형 |
조인 종속 제거 |
조인 종속이 존재하는 릴레이션이 사용하기 편함 지나치게 이상적인 정규형 |
'Learning > DB SQL 가이드' 카테고리의 다른 글
DB 모델링 - 4. 데이터 통합 : 4.1 데이터 통합 (0) | 2015.11.20 |
---|---|
DB 모델링 - 3. 정규화 : 3.6 정규형과 성능 (0) | 2015.10.25 |
DB 모델링 - 3. 정규화 : 3.4 함수종속 (0) | 2015.10.25 |
DB 모델링 - 3. 정규화 : 3.3 아노말리 (0) | 2015.10.25 |
DB 모델링 - 3. 정규화 : 3.2 정규화의 목적 (0) | 2015.10.25 |
댓글