본문 바로가기
Learning/DB SQL 가이드

DB 모델링 - 3. 정규화 : 3.5 정규형의 종류

by Pronician 2015. 10. 25.
반응형

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차 정규형

 조인 종속 제거

 조인 종속이 존재하는 릴레이션이 사용하기 편함

 지나치게 이상적인 정규형

반응형

댓글