정규화란 개념적 스키마 구조에서 보다 효율적인 스키마 구조를 만들기 위한 규칙이다. 정규화는 함수적 종속성을 기본으로 하기 때문에 정규화 학습 전에 함수적 종속성을 이해할 필요가 있다.
이상(Anomaly)
이상 현상이란 개념적 설계 단계에서 스키마 구조를 정제한 과정 없이 바로 구축해 사용한다면 여러 문제가 발생하게 되는데 이것을 이상 현상이라고 한다. 즉, 데이터 중복으로 인해 테이블 조작 시 예상하지 못한 현상이 발생하는데 그 이유는 속성들 간에 존재하는 여러 종류의 종속 관계를 하나의 릴레이션에 표현했기 때문이다. 따라서 하나의 테이블에 표현된 관계성을 잘게 자를 필요가 있다.
삽입 이상
테이블 관계가 잘못 설계가 되어서 새로운 데이터가 삽입할 때 발생하는 이상 현상이다. 예를 들어 복합 키로 구성된 테이블에서 복합 키를 구성하고 있는 키들 사이에 생성 시점이 다른 경우 삽입 이상이 발생하게 된다. (객체 무결성 원칙으로 기본 키는 유일하며 NULL이 될 수 없기 때문)
삭제 이상
삽입 이상과 비슷하게 복합 키를 구성하고 있는 키들 사이에 소멸 시점이 다른 경우에 나타나는 이상 현상이다. 복합 키를 구성하는 키 중 하나가 삭제된 경우 필요한 나머지 데이터도 객체 무결성 원칙을 보장하기 위해 함께 삭제해야 하기 때문이다.
갱신 이상
하나의 테이블에 같은 의미의 데이터가 여러 개 분산되어(중복되어) 존재할 경우 갱신 시 나타나는 이상 현상이다. 이것은 다른 테이블로 분리해야 할 데이터를 직접 참조하는 형태로 테이블이 작성되어 동일한 의미를 가지는 데이터가 중복 생성되어 있는 경우 수정 시 일부만 수정되어 동일한 의미 데이터 집합에서 서로 다른 상태가 존재해 데이터의 일관성(무결성)을 무너트리게 된다.
함수적 종속성
함수적 종속이란 하나의 테이블에 속해 있는 속성들 간의 관계를 표현하는 것이다.
$$ X \rightarrow Y $$
함수적 종속 관계를 표현할 때 위와 같이 표현하는데 여기서 X는 결정자, Y는 종속자라고 표현된다. X로 Y를 단 하나로 특정할 수 있는 관계를 의미한다.
완전 함수적 종속, 부분 함수적 종속
종속자(속성 또는 칼럼)이 복합 키를 구성하는 키들 중 부분적으로 의존하는 경우 부분 함수적 종속이라고 한다. 이런 부분 함수적 종속이 발생한 경우 2NF을 이용해 테이블을 분리해 완전 함수적 종속으로 바꿀 필요가 있다.
이행 함수적 종속
$$ A \rightarrow B \rightarrow C $$
이행적 함수적 종속이란 위와 같이 $ "A는 B이고, B는 C이면, A는 C이다" $를 만족하는 경우로 3NF을 만족하지 못하는 테이블을 의미한다. 따라서 $ A \rightarrow B $, $ B \rightarrow C $로 테이블을 분리할 필요가 있다.
다치 종속
다치 종속은 여러 값에 의존하는 경우로, 결정자로 종속자가 집합으로 결정되는 경우를 의미한다. 예를 들어서 하나의 수업에 여러 개의 교재와 여러 명의 강사가 있는 경우, 수업을 검색한 경우 교재와 강사가 중복된 집합 형태로 나오는 경우를 의미한다. 따라서 이 경우 4NF을 적용해 수업-교재, 수업-강사 테이블로 분리할 필요가 있다.
조인 종속
앞서 테이블을 분리하며 종속성 문제를 해결했다. 이때 중요한 것은 분리된 테이블을 다시 합쳐도 동일해야 한다는 무손실 분해 원칙을 보장해야 한다. 하지만 기존에 없던 위조 튜플(잘못된 관계에서 JOIN 수행으로 발생한 완전히 새로운 데이터)이 발생해 무손실 분해 원칙을 보장되지 않은 경우 조인 종속을 5NF으로 분리할 필요가 있다. 이때 5NF란, 조인 종속이 있는 테이블이 후보 키가 아닌 속성들로 구성된 경우 분리하는 것을 의미한다.
'독서 > 데이터베이스' 카테고리의 다른 글
정규화 (0) | 2022.01.11 |
---|---|
SQL 메모 정리 [작성중] (0) | 2022.01.05 |
트랜잭션과 잠금 (0) | 2022.01.01 |
쿼리 작성 및 최적화 (0) | 2021.12.30 |
실행 계획 분석 (0) | 2021.12.29 |