ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 모델링 10 - 정규화 이론(1정규화)
    Data Base/관계형 데이터 모델링 2023. 9. 19. 17:13

    정규화 이론

    앞선 게시물에서 설명한 것처럼 데이터 모델링은 2차원 표에 어떤(what)데이터를 어떻게(how)담는 것이 최적인지 고민하는 과정이다.

    어떤 데이터를 담아야 하는지 결정하는 것은 그리 어려운 작업이 아니다. 1)업무요건으로 관리해야 할 데이터가 어느 정도 정형화되고, 2)프로세스나 기능 관점의 모델링 단계에서 다시 한 번 확인하여 누락된 데이터를 발견할 수 있다. 다만 물리적으로 존재하지 않아 쉽게 확인할 수 없는 논리적 데이터 집합은 식별하기 어려울수 있다. 예를 들어 가족이라는 집합, 휴대폰 요금 수납의 부모 역할을 하는 청구하는 집합, 특정 기준을 세우고 그 기준에따라 무언가를 구분하고 분류하는 체계의 집합은 보거나 만질 수 없지만, 개념적으로 분명히 존재하는 집합이다.

     

    표 7-1 데이터 이상 현상이 존재하는 사례

    학번 과목코드 성명 과목명 평가코드
    101 CR03 박영진 공학수업 C
    101 CR11 박영진 심리학개론 A
    103 CR11 김영희 심리학개론 B
    103 CR15 김영희 논리학개론 F

    데이터 집합을 어떻게 담는 것이 가장 적합한지 알아보기 위해 위표에 담긴 데이터 사례를 살펴본자. 학생들의 수강 과목과 평가 결과를 담고 있는 [표 7-1]에는 구조적으로 '데이터 이상 현상'이 존재한다. 데이터 이상 현상(data anomaly)이란 표을 구성하는 속성의 값을 수정할 때, 아니면 표에 새로운 개체를 삽입하거나 삭제할 때 의도하지 않은 다른 데이터에 문제가 발생하는 현상이다.

     

    * anomaly : 변칙, 이례

     

    1️⃣[표 7-1]에 존재하는 문제

    • 평카코드 결과가 없는 김철수라는 학생에 대한 정보는 입력이 불가하다.(어느 속성 값도 null이 있을수 없다고 가정)
    • 과목코드가 CR11인 과목의 이름이 '심리학입문'으로 변경되면 박영진과 김영희의 CR11관련 열을 모두 찾아서 수정해야 한다.
    • 김영희의 F학점 평가 결과를 삭제하면 논리학개론 과목도 함께 삭제된다.

    위와 같은 데이터 이상 현상의 발생 원인은 데이터가  독립적이지 않고 또 중복으로 관리되어 데이터 간의 종속성에 계속 영향을 받기 때문이다. 현실의 데이터는 대부분 종속 관계를 맺고 있다. 모델링의 대상이되는 속성들의 종속성을 분석해서 하나의 종속성이 하나의 표 (관계형 이론에서 집합:relation)관리되도록 분해해가는 과정이 정규화(normalization)다. 다시 설명하면 속성들간의 종속성을 기준으로 분석해 어떻게  그룹화를하여 엔티티를 만들지 고심하는 과정이다. 정규화 이론대로 만들어진 모델은 속성간의 종속성들이 표하나를 중심으로 이루어져 있어 그 성격이 명확하다. 또 한 중복을 없애 데이터 이상 현상을 최소화 하고, 결국 데이터 무결성이 극대화된 구조가된다.

     

    함수 종속(functional dependency)은 하나의 집합(relation)안에 존재하는 속성 사이의 연관 관계다.  집합 내 속성 A가 속성 B의 값을 유일하게 식별하는 결정자(determinant)라면 속성 B는 속성 A에 함수적으로 종속된다. 앞선 사례에선 성명은 학번에 종속되고, 과목명은 과목코드에 종속되는 등 여러 종속 구조가 하나의 집합의 공존한다.

     

    • 종속성 1 : 학번 -> 성명
    • 종속성 2 : 과목코드 -> 과목명
    • 종속성 3 : 학번+과목코드 -> 평가코드

     

    이러한 개별적인 종속성 관계를 이루는 속성의 그룹은 모두 별도로 분리하여, 즉 정규화 하여 관리해야 데이터를 안정적인 구조로 관리할 수 있다.

     

    그림7-1 정규화 - 반복 속성, 다수의 값을 갖는 속성은 별도 엔티티로 분리한다.

    2️⃣그림 7-2 사원 엔티티 1정규화 사용 

    1정규화 Before

    사원

    사원번호 사원성명 사원주민등록번호 사원자격증
    101 김진희 970610-2~ 컴퓨터활용1급,운전면허증
    102 김준호 920810-1~ 컴퓨터 활용 1급

     

    1정규화 After

    사원

    사원번호 사원성명 사원주민등록번호
    101 김진희 970610-2~
    102 김준호 920810-1~

    사원보유자격증

    사원번호(FK) 보유자격증일련번호 보유자격증명 자격증취득일자
    101 1924758 운전면허증 2021.03
    101 2734589 컴퓨터활용1급 2022.07
    102 2734589 컴퓨터활용1급 2019.08

    1정규형에서는 모든 속성이 값을 반드시 하나만 가져야 한다. 

     

     

    3️⃣그림 7-3 자격증 정보를 독립 개체로 관리할 경우

    사원

    사원번호 사원성명 사원주민등록번호
    101 김진희 970610-2~
    102 김준호 920810-1~

    자격증

    자격증ID 자격증 이름 국제공인여부 자격증명설명 자격증분류코드
    200 컴퓨터활용1급 false ~ 01A
    201 운전면허증 false ~ 01B

    사원보유자격증

    자격증ID(FK) 사원번호(FK) 자격증취득일자
    200 101 2021.03
    200 102 2019.08
    201 101 2022.07

     

    물론 사원이 보유한 자격증 정보를 사원에 종속된 정보로 관리할경우 사원보유 자격증표에서 '컴퓨터 활용자격증 1급'이 중복되고 있다는것을 확인할 수있다. '컴퓨터 활용1급 자격증'을 이런 형태가 아니라 독립된  개체 정보로 유일하게  관리하고자 한다면  [그림 7-3]처럼 변경되어야 한다. 이는 앞선 게시물 데이터 모델링3에서 살펴본 설문지 모델링에서 살펴봤던 설문 질문, 보기의 관리 방식과 동일한 맥락에 있다.

     

    자격증을 독립된 개체로 관리할때 특정 자격증에 대한 수당 지원 여부를 관리하고자 한다면 <자격증수당지원여부> 속성은 어디에 위치해야 할까? 수당 지원 여부는 개별 자격증에 종속된 개념이므로 <자격증> 엔티티에 두어야 한다. 반면 <자격증취득일자>와 같은 속성은 자격증 보유자인 사원 정보까지 결합되어야 결정할 수 있으므로 <사원보유자격증>의 속성으로 들어가야한다.

     

     

    [출처 - 프로젝트의 성패를 결정짓는 데이터 모델링 이야기 , 김상래 저]

    댓글

Designed by Tistory.