Search

Normalization

정규화의 개념과 이상 현상

정규화(normalization)

데이터베이스를 잘못 설계하면 데이터의 삽입, 수정, 삭제 연산을 수행할 때 부작용(이상현상 (anomaly))이 발생정규화는 이상 현상이 발생하지 않도록 릴레이션을 분해(decomposition)하는 과정을 의미데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용하기도 함

이상 현상의 종류

삽입 이상(insertion anomaly) - 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
갱신 이상(update anomaly) - 중복 투플 중 일부만 변경되어 데이터가 불일치하게 되는 모순의 문제
삭제 이상(deletion anomaly) - 투플을 삭제하면 필요한 다른 데이터까지 함께 삭제되는 데이터 손실의 문제

정규화의 필요성

관련 없는 속성들을 하나의 릴레이션에 모아두고 있으면 여러 이상 현상이 발생정규화를 수행하기 위해선 속성들 간의 관련성인 함수적 종속성(Functional Dependency)을 판단해야 함일반적으로 릴레이션에 함수적 종속성이 하나 존재하도록 정규화를 통해 릴레이션을 분해

함수 종속

하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라 할 때, 어느 시점에서든 릴레이션 내의 모든 투플에서 하나의 X의 값에 대한 Y의 값이 항상 하나면
X -> Y (X는 결정자, Y는 종속자)
'X가 Y를 함수적으로 결정한다' 또는 'Y가 X에 함수적으로 종속되어 있다' 라고 함
함수 종속 관계는 현재 시점에 릴레이션에 포함된 속성 값만으로 판단하면 안 된다는 것을 유의해야 함
릴레이션에서 속성 값은 계속 변할 수 있기 때문에 속성 자체가 가지고 있는 특성과 의미를 기반으로 판단해야 함
완전 함수 종속 (Full Functional Dependency)릴레이션에서 속성 집합 Y가 속성 집합 X에 종속되어 있지만, 속성 집합 X의 일부분에 종속된 것이 아님을 의미
부분 함수 종속 (Partial Functional Dependency)속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미일반적으로 함수 종속이라고 하면 완전 함수 종속을 의미

정규형의 종류

릴레이션이 정규화된 정도는 정규형(Normal Form)으로 표현
정규형은 크게 기본 정규형과 고급 정규형으로 나뉨
기본 정규형 - 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형
고급 정규형 - 제4정규형, 제5정규형
각 정규형마다 만족시켜야 하는 제약조건이 존재
릴레이션이 특정 정규형의 제약조건을 만족하면 릴레이션이 해당 정규형에 속한다고 표현
정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
일반적으로 차수가 높은 정규형에 속하는 릴레이션일수록 바람직한 릴레이션이나, 모든 릴레이션이 제5정규형에 속해야 되는 것은 아니기에 릴레이션의 특성을 고려해서 적합한 정규형을 선택

제1정규형(1NF)

릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있어야 함
최소한 제1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음
삽입 이상, 갱신 이상, 삭제 이상 발생
릴레이션이 부분 함수 종속을 포함하고 있기 때문

제2정규형(2NF)

릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되야 함
정규화 과정에서 릴레이션을 분해할 때 주의할 점
분해된 릴레이션들을 자연 조인하여 분해 전의 릴레이션으로 다시 복원할 수 있어야 한다는 것
무손실 분해(nonloss decomposition)
릴레이션을 분해했을 때 정보 손실이 발생하지 않아야 함
삽입 이상, 갱신 이상, 삭제 이상 발생
릴레이션이 함수적 종속 관계를 여러 개 포함하고 있어 이행적 함수 종속이 존재하기 때문

제3정규형(3NF)

릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 함
이행적 함수 종속(transitive FD)속성집합 X, Y, Z가 존재하고 X->Y, Y->Z 일때, 논리적으로 X->Z가 성립이때 Z가 X에 이행적으로 함수 종속 되었다고 함함수 종속 관계가 하나의 릴레이션에 여러 개 존재하면 이행적 함수 종속이 나타남
후보키를 여러 개 가지고 있는 릴레이션의 경우 이상현상 발생할 수 있음 따라서 제3정규형도 이상 현상이 발생하는 경우 존재

보이스/코드 정규형(BCNF)

릴레이션의 함수 종속 관계에서 모든 결정자가 후보키가 되어야 함 (강한 제3정규형)보이스/코드 정규형에 속하는 모든 릴레이션은 제3정규형에 속하지만, 제3정규형에 속한다고 보이스/코드 정규형에 속하는 것은 아님
3NF → BCNF

제4정규형(4NF)

릴레이션이 보이스/코드 정규형을 만족하면서, 다치 종속(Multi Valued Dependency)을 제거해야 만족

제5정규형(5NF)

릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속(Join Dependency)을 제거해야 만족
실제로 설계 시 무조건 제5정규형에 속하도록 분해해야 하는 것은 아니며, 오히려 제5정규형까지 분해하면 비효율적이고 바람직하지 않은 경우가 존재
일반적으로 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결함