정규화
by Frinee이 글은 김연희 저 - "데이터베이스 개론 3판"을 공부하고 정리하여 작성하였습니다.
1. 정규화의 개념과 이상 현상
1️⃣ 정규화의 개념
- 정규화는 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해도 사용함.
- 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 삽입•수정•삭제 연산을 수행할 때 이상 현상이 발생
- 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화다.
2️⃣ 이상 현상의 종류
- 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상: 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상: 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
3️⃣ 정규화의 필요성
- 이런 이상 현상이 발생하는 이유는 관련 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문
- 관련 있는 속성들로만 릴레이션을 구성해야 하는데 이를 위해 필요한 과정이 정규화
- 정규화는 이상 현상이 발생하지 않도록 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
- 정규화 과정에선 먼저 릴레이션을 구성하는 속성들 간의 관련성을 판단해야 함.
- 이를 함수적 종속성이라 하고 릴레이션에 함수적 종속성이 하나 존재하도록 정규화를 통해 릴레이션을 분해함.
2. 함수 종속
하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라 할 때, 어느 시점에서든 릴레이션 내의 모든 튜플에서 X 값에 대한 Y 값이 항상 하나인 경우
- “X가 Y를 함수적으로 결정한다”
- “Y가 X에 함수적으로 종속되어 있다”
라 표현하고 X를 결정자, Y를 종속자라 한다.
- 완전 함수 종속(FFD: Full Functional Dependency): 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X 전체에 종속되어 있는 경우
- 부분 함수 종속(PFD: Partial Functional Dependency): 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에 함수적으로 종속됨을 의미, 이 경우 결정자가 여러 개여야 함.
3. 기본 정규형과 정규화 과정
1️⃣ 정규화의 개념과 정규형의 종류
- 함수의 종속성을 이용하여 릴레이션을 연관성이 있는 속성들로만 분해해 이상현상이 발생하지 않는 올바른 릴레이션으로 만들어가는 과정을 정규화라 함.
- 릴레이션이 정규화된 정도를 정규형으로 표현함
- 기본 정규형
- 제1정규형
- 제2정규형
- 제3정규형
- 보이스/코드 정규형
- 고급 정규형
- 제4정규형
- 제5정규형
- 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
2️⃣ 제1정규형
- 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1 정규형에 속한다.
- 각 속성값을 하나씩만 포함하도록 분해하여 모든 속성이 원자 값을 가지도록 해야 함.
고객아이디 | 이벤트번호 | 당첨여부 | 등급 | 할인율 |
apple | E001 | Y | gold | 10% |
apple | E005 | N | gold | 10% |
apple | E010 | Y | gold | 10% |
banana | E002 | N | vip | 20% |
banana | E005 | Y | vip | 20% |
carrot | E003 | Y | gold | 10% |
carrot | E007 | Y | gold | 10% |
orange | E004 | N | silver | 5% |
❓이상 현상 발생 분석
❗함수 종속 관계
고객아이디 → 등급
고객아이디 → 할인율
등급 → 할인율
{고객아이디, 이벤트번호} → 당첨여부
- 불필요한 데이터 중복되어 삽입 • 갱신 • 삭제 이상 현상이 발생
- 삽입 이상
- 릴레이션의 기본키가 {고객아이디, 이벤트번호} 이므로 새 고객에 데이터 삽입 시 반드시 이벤트 참여가 필요
- 갱신 이상
- 이벤트참여 릴레이션에는 고객아이디가 apple인 고객의 튜플이 3개이므로 이 고객의 등급과 할인율 속성 값이 중복되어 있음
- 고객의 등급이 gold → vip로 변경되면 세 튜플의 속성값을 모두 변경해야 함.
- 삭제 이상
- 고객아이디가 orange인 튜플은 단 하나인데 이벤트를 취소하게 되면 orange 고객에 대한 모든 정보가 날아감
3️⃣ 제2정규형
- 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.
- 제2정규형을 만족하게 하려면 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해하는 정규화 과정을 거쳐야 함.
고객아이디 | 등급 | 할인율 |
apple | gold | 10% |
banana | vip | 20% |
carrot | gold | 10% |
orange | silver | 5% |
고객아이디 | 이벤트번호 | 당첨여부 |
apple | E001 | Y |
apple | E005 | N |
apple | E010 | Y |
banana | E002 | N |
banana | E005 | Y |
carrot | E003 | Y |
carrot | E007 | Y |
orange | E004 | N |
- {고객아이디, 이벤트번호}에 완전히 종속되지 않는 등급•할인율 속성이 관련 없는 이벤트번호•당첨여부 속성과 같은 릴레이션이 존재하지 않도록 분해함.
- 정규화 과정에서 릴레이션을 분해할 때, 분해된 릴레이션들을 자연조인하여 분해 전 릴레이션으로 복원할 수 있어야 함.
- 정보의 손실 없이 릴레이션을 분해하는 것을 무손실 분해라 함.
- 그럼에도 발생할 수 있는 이상 현상이 있음
- 삽입 이상
- 새로운 등급과 할인율에 대한 정보를 고객아이디 때문에 삽입할 수 없음.
- 고객아이디를 NULL 값으로 두며 개체 무결성 제약조건을 위반
- 갱신 이상
- 등급에 대한 할인율을 변경할 경우 고객 릴레이션의 등급, 할인율 속성 값을 모두 고쳐야 함
- 삭제 이상
- 고객 탈퇴가 발생하면 등급과 할인율 정보까지 삭제됨.
4️⃣ 제3정규형
- 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형이 된다.
- 릴레이션을 구성하는 3개의 속성 집합 X,Y,Z 에 대해 함수 종속 관계 X→Y이면 Y→Z가 존재하면 논리적으로 X→Z가 성립한다.
- 이때 속성 집합 Z가 속성 집합 X에 이행적으로 함수 종속되었다고 함.
- 제2정규형을 만족했더라도 하나의 릴레이션에 함수 종속 관계가 여러 개 존재하고 논리적으로 이행적 함수 종속 관계가 유도되면 이상 현상이 발생할 수 있음
- 릴레이션에서 이행적 함수 종속을 제거해서 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 릴레이션을 분해하는 과정을 거쳐야 제 3정규형을 만족할 수 있다.
고객아이디 | 등급 | 할인율 |
apple | gold | 10% |
banana | vip | 20% |
carrot | gold | 10% |
orange | silver | 5% |
- 고객아이디가 기본키이므로 등급과 할인율 속성이 고객아이디에 함수적으로 종속
- 고객아이디가 등급을 결정하고 등급이 할인율을 결정하는 이행적 함수 종속 관계가 존재함.
- 고객 릴레이션에서 이상 현상이 발생하지 않도록 2개의 릴레이션으로 분해
고객아이디 | 등급 |
apple | gold |
banana | vip |
carrot | gold |
orange | silver |
등급 | 할인율 |
gold | 10% |
vip | 20% |
silver | 5% |
5️⃣ 보이스/코드 정규형
- 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.
- 하나의 릴레이션에 여러 개의 후보키가 존재할 수 있는데 이 경우에 제3정규형까지 만족해도 이상 현상이 발생할 수 있음
- 후보키를 여러 개 갖고 있는 릴레이션에서 발생할 수 있는 이상 현상을 해결하기 위해 제3정규형보다 좀 더 엄격한 제약조건이 보이스/코드 정규형이다.
- 보이스/코드 정규형은 제3정규형의 조건을 다 갖추면서도 좀 더 강한 제약조건을 갖고 있어 강한 제3정규형이라고 한다.
고객아이디 | 인터넷강좌 | 담당강사번호 |
apple | 영어회화 | P001 |
banana | 기초토익 | P002 |
carrot | 영어회화 | P001 |
carrot | 기초토익 | P004 |
orange | 영어회화 | P003 |
orange | 기초토익 | P004 |
- 전제조건
- 한 고객이 인터넷 강좌를 여러 개 신청할 수 있지만 동일한 인터넷강좌를 여러 번 신청할 수 없다.
- 강사 한 명이 인터넷강좌 하나만 담당할 수 있고, 하나의 인터넷강좌는 여러 강사가 담당할 수 있다.
- 이 경우, 튜플을 구별할 수 있는 후보키는 {고객아이디, 인터넷강좌}와 {고객아이디, 담당강사번호}가 있고 {고객아이디, 인터넷강좌}가 기본키로 선정되었다.
- 강좌신청 릴레이션은 모든 속성이 원자 값으로만 구성 (제1정규형)
- 기본키가 아닌 속성이 담당강사번호와 기본키에 완전 함수 종속되는 것은 물론, 이행적 함수 종속도 없음 (제2,3정규형)
- 담당강사번호 속성이 후보키가 아님에도 인터넷강좌 속성을 결정하므로 보이스/코드 정규형은 아님
- 발생할 수 있는 이상현상
- 삽입 이상
- 강사가 중급토익 강좌를 맡았지만 고객이 없다면 삽입이 불가능
- 갱신 이상
- 강사의 인터넷강좌가 변경되면 해당 강사와 관련된 튜플을 변경해줘야 함.
- 삭제 이상
- 고객아이디가 banana인 고객이 강좌를 취소하면 해당 강사가 강좌를 맡고 있다는 정보도 삭제되버림.
- 이는 후보키가 아니면서 함수 종속 관계에서 다른 속성을 결정하는 담당강사번호 속성이 존재하기 때문
그렇기 때문에 2개의 릴레이션으로 분해가 필요함
고객아이디 | 담당강사번호 |
apple | P001 |
banana | P002 |
carrot | P001 |
carrot | P004 |
orange | P003 |
orange | P004 |
담당강사번호 | 인터넷강좌 |
P001 | 영어회화 |
P002 | 기초토익 |
P003 | 영어회화 |
P004 | 기초토익 |
6️⃣ 제4정규형과 제5정규형
- 고급 정규형으로 분류되는 제4정규형은 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속을 제거해야 만족할 수 있음
- 제5정규형은 릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있음
- 일반적으로는 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상 문제를 해결함.
자료
- 데이터베이스 개론 3판 (김연희 저, 2024.1)
'[컴퓨터 과학자 스터디] > 데이터베이스' 카테고리의 다른 글
보안과 권한 관리 (0) | 2024.12.05 |
---|---|
회복과 병행 제어 (0) | 2024.12.02 |
데이터베이스 설계 (2) | 2024.11.27 |
데이터베이스 언어 SQL (0) | 2024.11.25 |
관계 데이터 연산 (0) | 2024.11.21 |
블로그의 정보
프리니의 코드저장소
Frinee