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