ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 정규화
    전공공부/데이터베이스 2020. 1. 3. 17:16
    728x90
    반응형

    목차

    1. 이상현상

    2. 함수 종속성

    3. 정규화

     

    01. 이상현상

    1. 이상현상의 개념

    2. 이상현상의 예

     

    1.1 이상현상의 개념

    잘못 설계된 데이터베이스가 어떤 이상현상(anomaly)을 일으킬까?

     

    삭제이상(deletion anomaly) 

    튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상 -> 연쇄삭제(triggered deletion)문제 발생

     

    삽입이상(insertion anomaly)

    튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL값을 입력해야 하는 현상-> NULL값 문제 발생

     

    수정이상(update anomaly)

    튜플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상 -> 불일치(inconsistency)문제 발생

     

    1.2 이상현상의 예

    1.2.1 잘못 설계된 계절학기 수강 테이블

    예시) summer 테이블 생성

    삭제이상

    삽입이상

    수정이상

     

     

    1.2.2 수정된 계절학기 수강 테이블

    테이블의 구조를 수정하여 이상현상이 발생하지 않는 사례

     

     

    삭제이상 없음

    삽입이상 없음

    수정이상 없음

     

    02. 함수 종속성

     

    'A->B'로 표기하며, A를 B의 결정자라고 한다.

     

    학생이름: 박지성 -> 강좌이름: 데이터베이스, 자료구조-> 함수적 종속성을 만족하지 않는다.

    학생수강성적 릴레이션

    학생수강성적 릴레이션에서 종속관계에 있는 예

    학생번호 -> 학생이름

    학생번호 -> 주소

    강좌이름 -> 강의실

    학과 -> 학과사무실

     

    종속하지 않는 예

    학생이름 -> 강좌이름

    학과 -> 학생번호

     

    종속성이 이렇게 있으면 안된다. (그래서 종속성은 실세계를 어떻게 반영하느냐의 판단기준이 된다.)

     

    종속하는 것처럼 보이지만 주의 깊게 보면 그렇지 않은 예

    학생이름 -> 학과 (동명이인을 생각해보면 같은 이름의 사람이 학과가 다를 수도 있다.)

    학생수강성적 릴레이션의 종속관계

    함수종속성 (FD, Functional Dependency)

    릴레이션 R과 R에 속하는 속성의 집합 X,Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응이 될 때 'X는 Y를 함수적으로 결정한다'라고 하고 X->Y로 표기한다. 이때 X를 결정자(determinant)라고 하고 , Y를 종속 속성(dependent attribute)이라고 한다. 함수 종속성은 보통 릴레이션 설계 때 속성의 의미로부터 정해진다.

     

    2.2 함수 종속성 다이어그램

    함수 종속성 다이어그램(functional dependency diagram)은 함수 종속성을 나타내는 표기법이다.

     

    릴레이션의 속성: 직사각형

    속성 간의 함수 종속성: 화살표

    복합속성: 직사각형으로 묶어서 그린다.

    학생수강성적 릴레이션의 함수 종속성 다이어그램

     

    2.3 함수 종속성 규칙

    X,Y,Z가 릴레이션 R에 포함된 속성의 집합이라고 할 때, 함수 종속성에 관한 다음과 같은 규칙이 성립된다.

     

    부분집합(Subset)규칙 if Y ⊆ X, then X → Y

    증가(Augmentation) 규칙 if X → Y, then XZ → YZ (XZ 속성 X,Z의 합집합)

    이행(Transitivity) 규칙 if X → Y and Y → Z, then X → Z

     

    위 세 가지 규칙으로부터 부가적으로 다음의 규칙을 얻을 수 있다.

     

    결합(Union) 규칙 if X → Y and X → Z, then X → YZ

    분해(Decomposition) 규칙 if X → YZ, then X → Y and X → Z

    유사이행(Pseudotransitivity) 규칙 if X → Y and WY → Z, then WX → Z

     

    학생수강성적 릴레이션에 함수 종속성 규칙을 적용한 예

     

    2.4 함수 종속성과 기본키

    릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.

    기본키가 함수 종속성에서 어떤 역할을 하는지 알면 이상현상을 제거하는 정규화 과저을 쉽게 이해할 수 있다.

     

    함수 종속성과 기본키

    릴레이션 R(K, A1, A2, A3, ..., An)에서 K가 기본키면, K R이 성립. 즉 기본키는 릴레이션의 모든 속성에 대해 결정자(determinant)이다.

     

    예) 이름이 같은 학생이 없다고 가정하면, '이름 -> 학과, 이름 -> 주소, 이름 -> 취득학점'이므로 '이름 -> 이름, 학과, 주소, 취득학점'이 성립한다. 즉 이름 속성이 학생 릴레이션의 전체를 결정한다.

    학생 릴레이션

    2.5 이상현상과 결정자

    이상현상은 한 개의 릴레이션에 두 개 이상의 정보가 포함되어 있을 때 나타난다.

    기본키가 아니면서 결정자인 속성이 있을 때 발생한다.

     

    학생수강성적 릴레이션의 경우 학생 정보 (학생번호, 학생이름, 주소, 학과)와 강좌정보(강좌이름, 강의실)가 한 릴레이션에 포함되어서 이상현상이 나타난다. (학과, 학생번호, 강좌이름은 기본키가 아니면서 결정자인 예이다 여기서는 학생번호, 강좌이름이 같이 묶여야 기본키에 해당)

     

    학생수강성적 릴레이션의 함수 종속성 다이어그램
    릴레이션의 분해를 계속 해준다.

    이상현상을 없애려면 릴레이션을 분해해야하고 위와 같이 (학생, 학과사무실) 속성을 학생수강성적 릴레이션에서 분리해야한다.

     

    학생수강성적 릴레이션에서 부분 릴레이션을 분해하기

    분해할 때 부분 릴레이션의 결정자는 원래 릴레이션에 남겨두어야 한다. 그래야 분해된 부분 릴레이션이 원래 릴레이션과 관계를 형성할 수 있다.

     

    1단계: 학생수강성적 릴레이션에서 (강좌이름, 강의실)을 분리

    학생수강성적1(학생번호, 학생이름, 학과, 주소, 강좌이름, 성적, 학과사무실)

    강의실(강좌이름, 강의실)

     

    2단계: 학생수강성적1 릴레이션에서 (학생번호, 강좌이름, 성적)을 분리

    학생학과(학생번호, 학생이름, 학과, 주소, 학과사무실)

    학생성적(학생번호, 강좌이름, 성적)

    강의실(강좌이름, 강의실)

     

    3단계: 학생학과 릴레이션에서 (학과, 학과사무실)을 분리

    학생(학생번호, 학생이름, 학과, 주소)

    학과(학과, 학과사무실)

    학생성적(학생번호, 강좌이름, 성적)

    강의실(강좌이름, 강의실)

    학생수강성적 릴레이션을 분해한 결과

     

    2.6 함수 종속성 예제

    함수 종속성은 보통 릴레이션을 설계할 때 속성의 의미로부터 정해지지만, 역으로 릴레이션에 저장된 속성 값으로부터 추정할 수 있다.

     

    [풀이]

    결정자가 한 개인 경우 : B C, C B, D A, D B, D C

    결정자가 두 개인 경우 :

      AB C (B C 이므로 AB C 는 함수종속성 규칙에서 당연히 성립한다.)
       AB
    D

      AC B (함수종속성 규칙에서 당연히 성립)

      AC D

      AD B (함수종속성 규칙에서 당연히 성립)

     

    결정자가 세 개인 경우 : ABC D (함수종속성 규칙에서 당연히 성립) …

    정답은 당연히 성립하는 것들을 제외한 다음 규칙만 적어주면 된다.

      B C, C B, D A, D B, D C, AB D, AC D

     

    03. 정규화 (normalizaion)

    1. 정규화 과정

    2. 무손실 분해

    3. 정규화 정리

     

    정규화란?

    이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정

    이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능하다.

    릴레이션은 정규형 개념으로 구분하며, 정규형이 높을수록 이상현상은 줄어든다.

     

    3.1.1 제 1정규형

    릴레이션 R의 모든 속성 값이 원자값(단일값)을 가지면 제 1정규형이라고 한다.

    -> RDM 릴레이션 데이터 모델이려면 반드시 제1정규형 즉 모든 속성값이 원자값을 가져야 한다.(만족해야 한다)

     

    제 1 정규형으로 변환

    고객 취미들(이름, 취미들) 릴레이션을 고객 취미(이름, 취미) 릴레이션으로 바꾸어 저장하면 제 1정규형을 만족한다.

    속성 값이 원자값을 갖도록 분해

    3.1.2 제 2정규형

    릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때 제 2 정규형이라고 한다.

    완전 함수 종속(full functional edpendency): A와 B가 릴레이션 R의 속성이고 A->B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고 한다.

     기본키 (학생번호,강좌 이름)가 성적을 결정지을때 완전함수 종속이고 강좌이름이 강의실을 결정지으면 부분함수 종속 즉 기본키A의 모든속성에 의해 다른 속송을 결정짓지만 A의 하나의 속성으로는 그 속성을 종속시키지 못할경우 완전함수종속 위의 예를들면 학생번호,강좌이름 -> 성적이지만 강좌이름 하나의 속성으로는 성적을 결정짓지 못한다.

    A의 부분속성이 다른속성을 결정지을 경우 부분함수 종속

     

    제 2정규형으로 변환

    수강강좌 릴레이션에서 이상현상을 일으키는 (강좌이름, 강의실)을 분해함

    3.1.3 제 3정규형

    릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적 non-transitive으로 종속할 때(직접종속) 제 3정규형이라고 한다.

    이행적 종속이란 A B, B C가 성립할 때 A C가 성립되는 함수 종속성이다.

    이런 이행적 종속을 분해를 해 줘야 한다.

     

    제 3정규형으로 변환

    계절학기 릴레이션에서 이상현상을 일으키는 (강좌이름, 수강료)를 분해한다.

    3.1.4 BCNF

    릴레이션 R이 제 3정규형이고 릴레이션 R에서 함수 종속성 X->Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF 정규형이라고 한다.

    3차 정규형을 만족하면서 BCNF는 만족하지 않는 경우는 언제일까? 바로 일반 컬럼이 후보키를 결정하는 경우이다.

     

     

    BCNF 정규형으로 변환

    특강수강 릴레이션에서 이상현상을 일으키는 (교수, 특강이름)을 분해한다.

     

    3.2 무손실 분해

    [분해]1의 경우 R1, R2를 다시 조인하면 원래 릴레이션이 된다.

    [분해]2의 경우 R3, R4 릴레이션을 다시 조인하면 의미없는 튜플이 생긴다. -> 무손실 분해 조건을 만족하지 못하고 손실(loss) 분해되었기 때문이다.

     

    3.3 정규화 정리

    대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 떄문에 보통 BCNF까지 정규화를 진행한다.

    정규형의 포함 관계

    728x90
    반응형

    '전공공부 > 데이터베이스' 카테고리의 다른 글

    7. 트랜잭션, 동시성 제어, 회복  (2) 2020.01.05
    5. 데이터 모델링  (0) 2020.01.02
    4. SQL 고급  (0) 2020.01.01
    3. SQL 기초  (0) 2020.01.01
    2. 관계 데이터 모델  (0) 2019.12.31

    댓글

Designed by Tistory.