관계형 데이터 모델링 프리미엄 가이드 DB구축 (2014년)
정규형의 종류 0 0 41,382

by 구루비스터디 정규화 1정규형 2정규형 3정규형 4정규형 5정규형 보이스코드 [2018.06.10]


  1. 1. 1정규형
    1. 1-1) 1정규형 정의
    2. 1-2) 다가 속성(Multivalued Atributes)
    3. 1-3) 복합 속성(Composite Attibutes)
    4. 1-4) 반복 속성
    5. 1-5) 정규형과 비정규형
    6. 1-6) 인스턴스 관점에서 1정규형
    7. 1-7) 엔터티별로 동일한 성격의 속성 존재
  2. 2. 2정규형
    1. 2-1) 2정규형이란?
    2. 2-2) 2정규형 사례
  3. 3. 3정규형
    1. 3-1) 3정규형이란?
    2. 3-2) 3정규형 사례
  4. 4. 보이스코드 정규형
    1. 4-1) 보이스코드 정규형이란?
    2. 4-2) 보이스코드 정규형 사례-1
    3. 4-3) 보이스코드 정규형 사례-2
  5. 5. 4정규형
    1. 5-1) 4정규형이란?
    2. 5-2) 4정규형 사례
  6. 6. 5정규형
    1. 6-1) 5정규형이란?
    2. 6-1) 5정규형 사례
    3. 6-2) 5정규형 도식화
  7. 7. 정규형 요약


1. 1정규형

1-1) 1정규형 정의

  • 모든 속성은 반드시 하나의 값을 가져야 함
  • 1정규화와 관련된 속성은 다가 속성과 복합 속성이 있음


1-2) 다가 속성(Multivalued Atributes)

  • 다가 속성은 같은 종류의 값을 여러 개 가지는 속성을 의미함


  • 위의 그림처럼 전화번호가 여러개의 값을 가지고 있어 식별자인 고객ID에 종속되지 않으므로 정규화된 엔터티가 아님
  • 엔터티의 모든 속성은 단일 값을 가져야 하므로, 다가 속성일 경우 별도의 엔터티가 필요함


  • 위의 내용을 모델로 표현하면 아래와 같이 정규화가 됨


  • 그림_4_5처럼 다가속성을 관리하지 않고 아래와 같이 관리할 수 있다


  • 하지만 그림_4_8은 물리적으로 1정규형이지만, 논리적으로 1정규형이 아님.
  • 고객이름과 주민등록번호 속성이 중복되었고, 고객ID에 종속되어 이 엔터티는 결국 2정규형을 만족하지 못함.
  • 그러나, 다가속성이 Fix되어 있을 경우, 성능을 위해 비정규화 모델을 사용할 수 있음,


  • 비정규화 시 주의할점은, 다가속성명을 정확히 기입해야 하며(전번_1, 전번_2, 전번_3과 같은 이름 불가), 다가속성 관점에 따른 인덱스가 많이 필요하고, NULL이 많아 OR 조건을 많이 사용해야 함


1-3) 복합 속성(Composite Attibutes)

  • 복합 속성이란 하나의 속성이 여러 개의 속성으로 분리될 수 있는 속성


  • 복합 속성은 무조건 분해해서는 안되며, 관리 요구사항에 따라 분해해야 함
    • 전체 주소를 하나의 속성에서 관리하지 않고, 분해하면 오히려 불편할 수 있음
    • 하지만, 동을 사용해서 집계한다는 요구사항이 많을 경우 분해해서 사용해야 함


  • 복합 속성 사례
    • 날짜 속성 : 연도, 월, 일로 구성된 대표적인 복합 속성
    • 코드 또는 번호 : 계좌번호나 보험번호 같이 하나의 값에 여러 의미를 두는 속성은 바람직하지 않음


1-4) 반복 속성

  • 반복 속성이란 다가 속성 중 하나로 하나의 엔터티에서 다수의 값이 있는 속성이며, 이 또한 분리를 해야 함


  • 이 엔터티를 분리할 경우 아래와 같이 됨


  • 다가 속성과 마찬가지로, 속성 개수가 Fix 될 경우 하나의 엔터티에서 관리할 수 있으나, 확장을 할 수 없음
  • 그러므로, 가급적 확장성을 위해 정규화를 통해 분리를 해야 함


1-5) 정규형과 비정규형


비정규형
  • 업무 요건의 변경에 매우 취약하며, 확장성이 떨어짐
  • 인덱스 수가 증가하고 특정 요건 조회 시 SQL이 복잡해짐
  • 엔터티의 속성이 추가될 가능성이 없을 때 사용 가능
  • 속성 레벨로 관리되는 데이터의 자식 엔터티를 가질 수 없음


정규형
  • 업무 요건의 변경에 유연하며, 확장성이 좋음
  • 인덱스 수가 감소하고, 특정 요건 조회 시 SQL이 단순해짐(하지만 요구사항에 따라 복잡해 질 수 있음)
  • 엔터티의 속성이 추가될 가능성이 존재할 때 사용
  • 로우 레벨로 관리되는 데이터의 자식 엔터티를 가질 수 있음


비정규형 추가 단점
  • 그림_4_12에서 상품코드1과 상품코드2의 배송처가 다를 경우 배송처를 관리할 수 없음
  • 정규형 인스턴스는 개별 데이터를 의미하므로, 관리가 필요한 하위 데이터가 존재할 경우 자식 엔터티를 둘 수 있지만, 비정규형은 여러 데이터가 묶여 있어 자식 엔터티를 둘 수 없음


1-6) 인스턴스 관점에서 1정규형

  • 속성이 아닌 반복되는 인스턴스를 1정규형으로 분리할 경우


  • 위의 그림에서 고객ID와 주문일자 속성이 중복 데이터이며, 상품코드와 수량은 다가 속성의 성격을 가짐


  • 다가 속성이 여러 개 존재할 경우, 위의 그림처럼 표현이 가능한데 이를 중첩 릴레이션이라고 함.
  • 하나의 인스턴스 내부에 다시 인스턴스가 존재하는 형태
  • 주문번호 속성은 릴레이션의 주 식별자이며, 상품코드는 중첩 릴레이션의 주 식별자인 동시에 릴레이션의 부분 주 식별자도 됨
  • 중첩 릴레이션은 관점에 따라 정규형 위반이 달라짐
    • 그림_4_15의 경우 속성에 하나 이상의 값을 가지고 있으므로, 1정규형을 위반함
    • 그림 4_14의 경우 고객ID와 주문일자 속성이 주 식별자 중에 주문번호에만 종속되므로 2정규형을 위반함


  • 이를 정규화하면 위와 같이 나눌 수 있음


1-7) 엔터티별로 동일한 성격의 속성 존재

  • 개인고객, 법인고객 엔터티가 존재하고 양쪽 엔터티에 전화번호 속성이 존재하면 값이 다르더라도 반복 속성이 됨
  • 이상적인 구조는 동일한 성격의 속성은 전사 모델에서 한 번만 존재하는 것이 좋음


2. 2정규형

2-1) 2정규형이란?

  • 2정규형은 엔터티의 모든 속성이 후보 식별자 전체에 종속적이어야 함
  • 만약, 일반 속성 중에 후보 식별자 전체에 종속적이지 않고 후보 식별자를 구성하는 속성 일부에 종속적인 속성이 있을 경우, 이를 분리해야 2정규형
  • 즉, 모든 비식별자 속성은 후보 식별자 속성에 완전함수속성이 되야 하며, 부분함수종속이 될 경우 이를 분리해야 함
  • 2정규형은 후보 식별자를 구성하는 속성이 두 개 이상일 경우에만 대상이 되고, 단일 속성으로 후보 식별자가 구성될 경우 대상이 아님


  • 위 그림의 경우 C 속성은 후보 식별자 B에만 종속인 부분함수종속이므로, 이를 아래처럼 분리해야 함


2-2) 2정규형 사례


  • 위 사례에서는 상품명, 단가 속성이 상품코드 후보 식발자에만 부분함수종속이므로, 이를 아래처럼 분리해야 함


  • 그러나 최근에 성능을 위해 상품명을 상품 엔터티가 아닌 주문상품에 추가로 배치하여 아래처럼 구성하는 경우가 존재함
    (주문상품 엔터티에서 상품명으로 조회하는 일이 빈번히 일어나는 경우)
  • 하지만, 이는 지양해야 하며, 가급적 속성은 한 곳에서만 관리해야 함
    (역자 주 : 성능저하가 에상되는 부분이라면, 이와 같은 중복속성은 허용되는 것이 좋을것으로 보임)


3. 3정규형

3-1) 3정규형이란?

  • 3정규형은 이행적 종속성과 관련이 있음
    • 이행적 종속성은 X → Y이고 Y → Z이면 X → Z가 성립한다는 내용
    • 3정규형은 일반속성(비식별 속성)간의 종속 관계르 분해하면 3정규형이 됨


3-2) 3정규형 사례


  • 위의 그림에서 속성 C는 일반속성이면서 속성 D의 결장자
  • 또한 속성 D는 주 식별자인 A, B에 간접 종속되어 있음
  • 이 엔터티는 직접적인 함수 종속에 의해 분해해야 하며, 분해되면 아래처럼 분해 가능


  • 아래의 그림은 고객ID와 고객명이 함수 종속 관계이며, 고객ID를 알면 고객 이름이 하나만 결정되므로 고객명은 고객ID에 종속적인 속성


  • 일반속성에 종속이 발생했으므로, 아래의 그림처럼 엔터티 분리를 해야 함


4. 보이스코드 정규형

4-1) 보이스코드 정규형이란?

  • 보이스코드 정규형이란, 릴레이션이 존재하는 종속자가 후보 식별자일 경우 BC 정규형이 아님
  • 보이스코드 정규형을 만족하면 3정규형이 되지만, 3정규형을 만족하여도 보이스코드 정규형이 아닐 수 있음


  • 예제1의 경우, A, B가 주 식별자인데, 일반속성 C에 종속된 B가 주 식별자이므로 BC정규형에 어긋남.
    하지만, 일반속성간계 종속 관계가 없으므로 3정규형을 위반하지 않음
  • 예제2의 경우, 주 식별자는 A 속성 하나이며, B, C는 속성이 후보 식별자인데, 일반속성 D에 종속된 C가 후보식별자이므로 BC정규형에 어긋남
  • 이를 정규화하면 아래의 그림처럼 분해할 수 있음


4-2) 보이스코드 정규형 사례-1



  • 위 그림은 학생의 학점을 관리하는 엔터티인데, 학생은 여러 과목을 수강할 수 있으며, 교수는 한 과목만 강의할 수 있고 여러 교수가 동일과목을 강의할 수 없다고 가정할 경우 폐포는 아래와 같음
    • FD1 : (학생번호, 과목명) → (교수번호, 학점)
    • FD2 : 교수번호 → 과목명
  • 이 때, FD2의 종속자인 과목명이 FD1의 후보식별자이므로 BC정규형에 어긋남
  • 이를 BC정규형으로 분해할 경우 아래와 같이 나옴


  • 만약, 과목명을 함께 후보식별자로 한다 하더라도, 후보식별자간 종속관계가 되기 때문에 분해해야 함


4-3) 보이스코드 정규형 사례-2


  • 위의 예제또한 업체번호 속성이 업체명 속성을 종속하므로 BC정규형 위반이며, 분해해야 함


5. 4정규형

5-1) 4정규형이란?

  • 4정규형은 다가 종속을 분해하는 작업
  • 다가 종속이란, 한 릴레이션에 다가 속성이 두 개 이상 존재할 때 발생함
    • 하나의 A값에 대응하는 여러 개의 B 값이 있고, A 값에 대응하는 여러 개의 C 값이 있는 상태에서 B와 C가 관련이 없을 경우 다가 속성 관계
    • 속성 A 하나에 속성 B가 여러 값을 결정하면 A→→B로 표시하며, A가 B를 다가결정한다라고 하고 B가 A에게 다가 종속됐다 라고 함


5-2) 4정규형 사례


  • 홍길동의 기술은 모델링과 튜닝이며, 한국어와 영어를 구사하지만 기술과 언어와는 종속 관꼐가 없음
    (모델링을 영어로 할 수 있다는 의미가 아니므로, 기술과 언어는 서로 독립적임)
  • 이를 방지하기 위해 릴레이션2를 사용해야 하는데, 중복데이터가 많이 발생하여 이 또한 문제가 됨
  • 해서, 아래처럼 1:1로 매칭을 할 경우 기술과 언어가 서로 종속적인 관계처럼 보이므로 안됨


  • 그러므로, 다가 종속의 엔터티는 아래와 같이 분해를 해야해야 함


  • 4정규형은 1정규형과 비슷한데, 1정규형이 다가 속성을 분해하는 것이고 4정규형은 다가 종속을 분해하는 것이므로, 다가 속성을 1정규형으로 만들면 자연스럽게 다가 종속 또한 제거됨
  • 주의할 점은 다가 종속간계 관계가 없을 경우에만 4정규형을 해야 하며, 관계가 있을 경우 이를 분해하면 안됨


6. 5정규형

6-1) 5정규형이란?

  • 2, 3, BC정규형은 함수 종속 개념을 기반으로 수행한 것이며, 4정규형은 다가 종속 개념을 기반으로 수행함
  • 하지만 5정규형은 조인 종속 개념을 기반으로 하며, 조인 종속이 존재하면 5정규화 대상
  • 5정규형 조건 : 무손실 조인과 비부가적 조인을 만족한 엔터티가 5정규형
    • 무손실 조인(Lossless Join) : 하나의 엔터티를 여러 개의 엔터티로 분해한 후 공통(식별자) 속성으로 조인하여 데이터 손실 없이 원래의 릴레이션으로 복원할 수 있는 경우
    • 비부가적 조인(Nonadditive Join) : 조인한 결과에 원래 엔터티에 없는 데이터가 존재하지 않는 경우
  • 5정규형은 하나의 엔터티를 분해하고 다시 합쳤을 때 원래의 엔터티로 복원할 수 있으면 그 엔터티는 조인 종속이 존재하는 엔터티이며, 조인 종속이 존재하지 않을 때까지 분해한 엔터티


6-1) 5정규형 사례


  • 위 그림은 4정규형의 사례지만, 업무요건이 기술과 언어 사이에 관계가 있다고 가정할 경우임
  • 둘 사이에 관계가 존재하므로 이를 아래처럼 나눌 경우 5정규형이 됨


  • 5정규형은 하나의 엔터티에서 관리해 아노말리 현상이 발생하지 않고 관리가 힘들어 실무에서 자주 사용되지 않음
  • 하지만, 5정규형을 이해하고 있어야 정확한 정규화를 할 수 있으며, 만약 아래처럼 4정규화를 할 경우 기술과 언어 사이에 관계를 잃어버리므로 반드시 알고 사용해야 함


6-2) 5정규형 도식화


  • 5정규형은 3개체 관계와 연관이 있는데, 위와 같이 3개체 관계는 사원, 기술, 언어 세 엔터티의 주 식별자와 연돤된 관계임
  • 3개체 관계는 일반적으로 세 개의 엔터티로 분해할 수 있으며, 이렇게 분해할 경우 5정규형이 됨


  • 위의 그림은 4정규형과 5정규형을 도식화한 그림이며, 5정규형은 C 엔터티가 필요함


  • 실제 업무에서는 5정규형을 위반하지만, 3개의 관계 엔터티를 가져가지 않고 하나의 엔터티만 가져가는 경우가 대부분


7. 정규형 요약

"구루비 데이터베이스 스터디모임" 에서 2014년에 "관계형 데이터 모델링 프리미엄 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3597

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입