정규화의 개념과 이상 현상
정규화의 개념
데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입∙수정∙삭제 연산을 수행할 때 부작용이 발 생할 수 있다. 이러한 부작용을 이상현상이라 하며 이를 제거하는 하며 설계하는 과정을 정규화라고 한다.
이상 현상의 종류
- 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
정규화의 필요성
이상 현상은 관련이 없는 데이터, 관련 없는 속성들을 하나의 릴레이션에 가지고 있기에 생기게 된다. 이상 현상이 발생하지 않도록 하려면, 관련 있는 속성들로만 릴레이션을 구성해야하고 이를 정규화를 통해 할 수 있다. 즉, 정규화는 이상 현산이 발생하지 않도록, 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이다.
함수 종속
하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라 할 때, 어느 시점에서든 릴레이션 내의 모든 투플에서 하나의 X값에 대한 Y 값이 항상 하나면 X가 Y를 함수적으로 결정하고, Y가 X에 함수적으로 종속되어 있다고 말할 수 있다. 즉, 함수 종속 관계는 X→Y로 표현하고 X를 결정자, Y를 종속자라고 한다. 예를 들면 고객 릴레이션에서 고객아이디→고객이름과 같은 속성이 있을 수 있다. 다만 함수 종속 관계를 판단할 때 유의할 점은 현재 시점에 릴레이션에 포함된 속성 값만으로 판단하면 안된다는 것이다. 릴레이션에서 속성 값은 계속 변할 수 있기 때문에 속성 자체가 가지고 있는 특성과 의미를 기반으로 판단해야 한다.
완전 함수 종속은 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X 전체에 종속된 것인지 일부분에 종속된 것이 아님을 의미한다. 부분 함수 종속은 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미하며, 부분 함수 종속 관계가 성립하려면 결정자가 여러 개의 속성들로 구성되어 있어야 한다.
기본 정규화와 정규화 과정
정규화의 개념과 정규형의 종류
함수 종속성을 이용하여 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어가는 과정을 정규화라고 한다. 정규화의 기본 목표는 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것이다. 릴레이션이 정규화된 정도는 정규형으로 표현하며 크게 기본 정규형과 고급 정규형이 있다. 기본 정규형에는 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형이 있고, 고급 정규형에는 제4정규형, 제5정규형이 있다.
일반적으로 차수가 높은 정규형에 속하는 릴레이션일수록 데이터 중복이 줄어 데이터 중복에 의한 이상 현상이 발행하지 않는 바람직한 릴레이션이지만 모든 릴레이션이 제5정규형에 속해야 되는 것은 아니다.
제1정규형(1NF)
릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제1정규형에 속한다. 관계 데이터베이스의 모든 릴레이션을 모든 속성이 원자값을 가지는 특성이 있기에 최소한 제1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 수 있다. 다만 제1정규형을 만족하더라도 불필요한 데이터르 중복으로 인해 이상 현상이 발생하는 릴레이션이 생길 수 있다. 즉, 부분 함수 종속이 생길 수 있는데, 이를 위해 릴레이션을 분해하여 부분 함수 종속을 제거하면 제2정규형에 속하게 된다.
제2정규형(2NF)
릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다. 즉, 제1정규형에 속하는 릴레이션이 제2정규형을 만족하게 하려면, 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해하는 정규화 과정이 필요하다. 다만 부분 함수 종속이 제거되도록 릴레이션을 분해하더라도 함수 종속성을 여전히 가지고 있어서 이상 현상이 발생할 수 있다. 다시 말해 함수적 종속 관계를 여러 개 포함하고 있어 결과적으로 이행적 함수 종속이 생기기 때문에 이를 위해 릴레이션을 분해하여 이행적 함수 종속을 제거하면 제3정규형에 속하게 된다.
제3정규형(3NF)
릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형에 속한다. 이행적 함수 종속이란 X→Y, Y→Z의 함수 종속 관계를 가지는 상황에서 X→Z가 성립하게 되는 상황을 의미한다. 제2정규형을 만족하더라도 하나의 릴레이션에 함수 종속 관계가 여러개 있고 그중에서도 이행적 함수 종속 관계를 가지게 되면 이상 현상이 발생할 수 있다. 따라서 이행적 함수 종속이 발생하지 않도록 릴레이션을 분해해야 한다.
보이스/코드 정규형(BCNF)
릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다. 제3정규형까지 마치고 나면 하나의 릴레이션에 여러개의 후보키가 존재할 수도 있는데, 이 경우에은 제3정규형까지 모두 만족하더라도 이상 현상이 발생할 수 있다. 따라서 후보키가 여러개 있을때 발생할 수 있는 이상 현상을 방지하기 위해 보이스/코드 정규형을 하게 된다. 따라서 제3정규형의 릴레이션에서 기본키가 유일한 후보키이며 함수 종속 관계어서도 유일한 결정자가 되도록 릴레이션을 분해한다.
제4정규형과 제5정규형
고급 정규형으로 분류되는 제4정규형은 릴레이션이 보이스/코드 정규형을 만족하면서, 함수종속이 아닌 다치 종속을 제거해야 만족할 수 있다. 그리고 제5정규형은 릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다. 다만 오히려 제5정규형까지 만족할 때까지 분해할 경우 비효율적일 때가 많다.
정규화 과정 정리
릴레이션을 분해하여 모든 속성의 도메인이 원자 값으로만 구성되도록하면 제1정규형이 된다. 제1정규형에 속하는 릴레이션에서 부분 함수 종속을 제거하여 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형이 된다. 제2 정규형 릴레이션에서 이행적 함수 종속을 제거하면 제3정규형이 된다. 제3정규형 릴레이션에서 후보키가 아닌 결정자를 제거하면 보이스/코드 정규형이 된다.
출처
데이터베이스 개론 2판 - 한빛아카데미 출판, 김연희 저
'Summary' 카테고리의 다른 글
[데이터베이스 개론] 11장. 보안과 권한 관리 (0) | 2022.02.07 |
---|---|
[데이터베이스 개론] 10장. 트랜잭션 (0) | 2022.02.07 |
[데이터베이스 개론] 08장. 데이터베이스 설계 (0) | 2022.02.04 |
[데이터베이스 개론] 07장. 데이터베이스 언어 SQL (0) | 2022.01.25 |
[데이터베이스 개론] 05장. 관계 데이터 모델 (1) | 2022.01.22 |