정규화
업데이트:
개요
한 테이블에 여러 속성들을 혼합하다보면 데이터가 중복 저장되어 저장 공간을 낭비하게 되고, 의도하지 않은 현상이 발생할 수 있다. 정규화는 이러한 문제를 해결하기 위한 과정인데, 자세히 알아보기 전에 이상현상과 릴레이션, 함수 종속성에 대해 먼저 알아보도록 하자.
이상현상, Anomaly
테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상으로 아래 세가지의 유형이 있겠다.
🔎 삭제 이상 deletion anomaly : 데이터 삭제 시 해당 데이터가 포함된 튜플 전체가 삭제되어 의도하지 않은 정보 손실이 발생하는 현상
🔎 삽입 이상 insertion anomaly : 데이터 삽입 시 의도하지 않은 값이 삽입되거나, key 값이 없어 데이터를 삽입하지 못하는 현상
🔎 수정 이상 update anomaly : 데이터 수정 시 일부만 수정되어 데이터가 불일치하거나 중복되는 튜플이 존재하게 되는 현상
위와 같은 이상현상은 속성들의 종속관계를 하나의 테이블로 표현하기 때문에 발생하게 되며, 정규화에 의해 테이블을 분리하면 해결할 수 있다.
릴레이션, Relation
릴레이션은 데이터의 집합으로 테이블과 같은 의미로 사용되며 튜플과 속성으로 구성된다.
🔎 튜플 tuple : 연관된 속성값의 모음, 릴레이션을 구성하는 각각의 행을 의미
🔎 속성 attribute : 개체가 갖고 있는 고유한 특성, 더 이상 분리될 수 없는 최소의 데이터 보관 단위
함수 종속성, Functional Dependency
어떤 테이블의 속성 A, B에 대해 A값에 의해 B값이 유일하게 정해지는 관계를 종속성이라 하며 아래와 같이 표현된다.
![](https://overtae.github.io/blog/assets/images/cs/database/nf.png)
함수 종속성은 크게 아래 세가지로 나뉜다.
🔎 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속되는 경우
🔎 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나 기본키가 아닌 다른 속성에 종속되는 경우
🔎 이행적 함수 종속 : A → B, B → C 일 때, A → C 가 성립하는 경우
정규화, Normalization
정규화란 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정을 말한다. 이 때 릴레이션이 분해되는 정도(함수 종속성의 유형)에 따라 정규형 단계로 나누어지며, 정규형이 높아질수록 이상현상이 줄어든다.
목적
✅ 중복을 배제하여 이상현상 발생을 방지 → 무결성 유지, DB 저장 용량 감소
✅ 각 릴레이션에 중복된 종속성을 여러 릴레이션에 분할
✅ 어떤 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
✅ 효과적인 검색 알고리즘 생성
✅ 새로운 속성 추가 시 DB 구조 변경 최소화 → 연동된 응용프로그램의 생명 연장
✅ 논리적인 데이터 저장
원칙
✅ 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 함
✅ 최소 데이터 중복 : 이상현상 제거, 데이터 중복 최소화
✅ 분리의 원칙 : 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리
정규형
정규화된 결과를 정규형이라고 하며 기본 정규형과 고급 정규형으로 나뉜다.
🔎 기본 정규형 : 제 1 정규형, 제 2 정규형, 제 3 정규형, BCNF(보이스/코드) 정규형
🔎 고급 정규형 : 제 4 정규형, 제 5 정규형
제 1 정규형, 1NF
: 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
제 2 정규형, 2NF
: 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
제 3 정규형, 3NF
: 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
BCNF 정규형, BCNF
: 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
💡 후보키? 행의 식별을 위해 필요한 특성 또는 그 집합
제 4 정규형, 4NF
: 릴레이션이 BCNF를 만족하면서 함수 종속이 아닌 다치 종속을 제거한 것
다치 종속, MVD: Multi Valued Dependency
어떠한 조건을 만족하는 튜플이 릴레이션 안에 있을 것을 요구하는 일종의 제약 조건을 말한다. 속성 A, B에 대해 A가 B의 값 하나를 결정하는 것이 아닌 여러 개의 값(값의 집합)을 결정한다. 표기법은 아래와 같이 이중 화살표를 사용한다.
\[A ↠ B\]제 5 정규형, 5NF
: 릴레이션이 제 4 정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거한 것
조인 종속, JD: Join Dependency
테이블을 분해한 결과를 다시 조인했을 때 원래의 테이블과 동일하게 복원되는 제약조건이다.
반정규화, De-normalization
정규화는 이상현상의 발생을 줄이지만, 릴레이션간의 연산이 많아져 연산 시간이 증가하게 된다. 반정규화는 정규화된 데이터 모델을 통합함으로써 시스템의 성능을 향상시킨다. 즉, 의도적으로 정규화 원칙을 위배하는 행위이다.
종류
🔎 테이블 통합/분할/추가
🔎 중복 속성 추가
장점
👍 테이블이 단순해져 관리 효율성 증가
👍 의도적인 중복 생성으로 검색 기능 향상
단점
👎 데이터의 일관성이나 무결성이 보장되지 않을 수 있음
👎 데이터 갱신, 삭제 등의 성능 저하
사용하는 경우
✅ 수행 속도가 많이 느린 경우
✅ 테이블의 JOIN 연산을 지나치게 사용하여 데이터를 조회하는 것이 어려운 경우
✅ 테이블에 많은 데이터가 있고 다량의 범위 혹은 특정 범위를 자주 처리해야 하는 경우
댓글남기기