Frinee의 코드저장소

정규화

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

활동하기