업데이트:

개요

한 테이블에 여러 속성들을 혼합하다보면 데이터가 중복 저장되어 저장 공간을 낭비하게 되고, 의도하지 않은 현상이 발생할 수 있다. 정규화는 이러한 문제를 해결하기 위한 과정인데, 자세히 알아보기 전에 이상현상과 릴레이션, 함수 종속성에 대해 먼저 알아보도록 하자.

이상현상, Anomaly

테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상으로 아래 세가지의 유형이 있겠다.

🔎 삭제 이상 deletion anomaly : 데이터 삭제 시 해당 데이터가 포함된 튜플 전체가 삭제되어 의도하지 않은 정보 손실이 발생하는 현상

🔎 삽입 이상 insertion anomaly : 데이터 삽입 시 의도하지 않은 값이 삽입되거나, key 값이 없어 데이터를 삽입하지 못하는 현상

🔎 수정 이상 update anomaly : 데이터 수정 시 일부만 수정되어 데이터가 불일치하거나 중복되는 튜플이 존재하게 되는 현상

위와 같은 이상현상은 속성들의 종속관계를 하나의 테이블로 표현하기 때문에 발생하게 되며, 정규화에 의해 테이블을 분리하면 해결할 수 있다.

릴레이션, Relation

릴레이션은 데이터의 집합으로 테이블과 같은 의미로 사용되며 튜플과 속성으로 구성된다.

🔎 튜플 tuple : 연관된 속성값의 모음, 릴레이션을 구성하는 각각의 행을 의미

🔎 속성 attribute : 개체가 갖고 있는 고유한 특성, 더 이상 분리될 수 없는 최소의 데이터 보관 단위

함수 종속성, Functional Dependency

어떤 테이블의 속성 A, B에 대해 A값에 의해 B값이 유일하게 정해지는 관계를 종속성이라 하며 아래와 같이 표현된다.

함수 종속성은 크게 아래 세가지로 나뉜다.

🔎 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속되는 경우

🔎 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나 기본키가 아닌 다른 속성에 종속되는 경우

🔎 이행적 함수 종속 : 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 연산을 지나치게 사용하여 데이터를 조회하는 것이 어려운 경우

✅ 테이블에 많은 데이터가 있고 다량의 범위 혹은 특정 범위를 자주 처리해야 하는 경우

댓글남기기