Normalization(정규화)

개요

  • 데이터 베이스 설계가 잘못되면, 테이블에 삽입, 삭제, 수정시 이상현상(anomaly)이 발생한다.

  • 이상현상은 데이터의 무결성을 깨뜨리기에, 함수 종속성을 파악하여 규칙에 따라 테이블을 분해해야 함.

  • 이처럼, 잘못 설계된 테이블을 수정하여 정상으로 만드는 과정을 정규화라고 한다.

01. 이상현상

  • 데이터 베이스 설계가 잘못되면, SQL문의 결과가 틀리거나 원치 않는 결과가 발생하는 등의 문제 발생.

  • 삭제이상: 튜플(행) 삭제 시, 저장된 다른 정보까지 연쇄적으로 삭제되는 현상

  • 삽입이상: 튜플(행) 삽입 시, 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야하는 현상

  • 수정이상: 튜플(행) 수정 시, 중복된 데이터의 일부만 수정되어 데이터의 불일치문제 일어남.

02. 함수 종속성

01) 개념

  • 함수 종속성은 릴레이션 구조에 관한 이론적인 내용이 포함되어 있으므로 아래 용어로 설명

    • 테이블 => 릴레이션

    • 행 => 튜플, 열 => 속성

  • 함수적 종속성: 속성 A라는 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존관계

    • 속성 B는 A 속성에 종속한다. (dependent)

    • 속성 A는 속성 B를 결정한다.(determine)

    • A -> B

    • A는 B의 결정자

  • 함수 종속성을 판단할 때에는, 릴레이션의 현재 인스턴스(데이터)만 가지고 판단하는게 아니라, 속성이 가진 의미를 가지고 판단해야한다.

02) 함수 종속성 다이어그램

  • 함수 종속성을 나타내는 표기법

    • 릴레이션의 속성(열) : 직사각형

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

    • 복합 속성의 경우: 직사각형으로 묶어서 표현. (학생번호, 강좌이름)

03) 함수 종속성 규칙

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

  • 부분집합(subset) 규칙: If Y ⊆ X, then X -> Y

  • 증가(augmentation) 규칙: If X -> Y then XZ -> YZ

  • 이행(transitivity) 규칙: If X -> Y and Y -> Z then, X -> Z

위 3 가지 규칙으로 부가적으로 규칙 더 얻을 수 있음(아래 3가지)

  • 결합(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

04) 함수 종속성과 기본키

  • 릴레이션에서 함수 종속성을 알기 위해서는 기본키를 우선 찾아야한다.

  • 릴레이션R(K, A1, A2, A3, ..., An)에서 K가 기본키일때 K->R 성립.

  • 기본키는 릴레이션의 모든 속성에 대한 결정자(determinant)

05) 이상현상 및 결정자

  • 이상현상: 한 개의 릴레이션에 2개 이상의 정보가 포함되어있을 때.

  • 기본키가 아니면서, 결정자인 속성(비후보키 결정자 속성)이 있을 때 발생

03. 정규화

이상현상의 원인은 여러가지가 있는데, 대부분 2가지 이상의 정보가 한 릴레이션에 저장되어 있기 때문에 발생한다. 따라서, 이상현상은 릴레이션을 분해하여 제거한다. 분해된 릴레이션에 이상현상이 남아있다면 이상현상이 없어질 때까지 분해한다. 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정을 정규화라 한다.

01) 정규화 과정

  • 제 1 정규형

    • 한 릴레이션을 구성하는 모든 도메인이 원자값(Atomic Value)만으로 구성되도록 한다.

    • 원자값: 더이상 쪼개지지 않는 단위

  • 제 2 정규형

    • 제 1 정규형을 만족하면서, 기본키가 아닌 속성이 기본키에 완전 함수 종속일때 제2정규형이라 한다.

      • 완전 함수 종속 관계(FFD, Full Functional Dependency)

        • 종속자가 기본키에만 종속이 되며, 기본키가 여러 속성으로 구성되어있을 경우, 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우.

      • 부분 함수 종속 관계(Partial Functional Dependency)

        • 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있는 경우 기본키를 구성하는 속성중 일부만 종속되는 경우.

  • 제 3 정규형

    • 제 2 정규형을 만족하고, 이행적 함수 종속관계를 갖지 않는 것.

    • 이행적 종속: A->B, B->A일때 A->C 성립되는 함수 종속성

  • BCNF

    • 모든 결정자가 후보키 집합에 속한 정규형

    • (결정자이면서 후보키를 만족하지 않는 속성이 있을 때 이상현상 발생.)

  • 제 4 정규형

    • 다치 종속성을 가진 릴레이션과 관련

  • 제 5 정규형

    • 프로젝트- 조인 정규형, 조인 종속성을 가진 릴레이션과 관련

02) 무손실 분해

  • 분해된 릴레이션 간의 관계를 유지하기 위해, 분해된 릴레이션에 공통속성을 1개 이상 두어야한다.

  • 공통 속성은 분해된 릴레이션을 다시 원래 릴레이션으로 합성(조인) 할 때, 사용.

  • 무손실 분해: 릴레이션 R을 분해하여 두개의 릴레이션 R1, R2를 만들었을 때, 다시 조인하면 R이 만들어진다는 의미.

  • 조건

    • 분해할 때 공통된 속성이 R1의 키 (R1∩R2 -> R1) 이거나 R2의 키( R1∩R2 -> R2)여야 한다.

[참조 링크]

함수적 종속: https://dodo000.tistory.com/20

책: MySQL로 배우는 데이터 베이스 개론과 실습 chapter 07

그림: https://mangkyu.tistory.com/28

키 종류(후보키) : https://jerryjerryjerry.tistory.com/49

Last updated