CS/데이터베이스

데이터베이스 - 정규화 (1) : 이상 현상과 함수 종속

JWonK 2022. 5. 26. 14:36
728x90
반응형

※ 정규화의 개념과 이상 현상


▶ 이상(Anomaly) 현상

불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입/수정/삭제 연산을 수행할 때 발생할 수 있는 부작용

 

 

▶ 정규화(Normalization)

이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정

 

 

▶ 이상 현상의 종류

이상 현상 종류 발생하는 문제
삽입 이상 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
갱신 이상 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
삭제 이상 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

 

이상 현상을 설명하기 위한 릴레이션의 예

고객 아이디 이벤트 번호 당첨 여부 고객이름 등급
apple E001 Y 정소화 gold
apple E005 N 정소화 gold
apple E010 Y 정소화 gold
banana E002 N 김선우 vip
banana E005 Y 김선우 vip
carrot E003 Y 고명석 gold
carrot E007 Y 고명석 gold
orange E004 N 김용욱 silver

→ 고객 정보와 이벤트 정보를 함께 관리

 

 

삽입 이상(Insertion Anomaly)

  • 릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야하는 문제
  • 삽입 이상이 발생하는 예
    • → 이벤트 참여 릴레이션에서 신규 고객 데이터 포함
      • 신규 고객 데이터 중 이벤트에 참여하지 않으면서 아이디가 "melon", 이름이 "성원용", 등급이 "gold"을 가진 데이터는 릴레이션에 삽입할 수 없음
      • 삽입하려면 실제로 참여하지 않은 임시 이벤트 번호를 삽입해야함

 

이벤트 참여 릴레이션의 삽입 이상

이벤트참여 릴레이션의 삽입 이상

 

 

▶ 갱신 이상(update Anomaly)

  • 릴레이션의 중복된 투플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 문제
  • 갱신 이상이 발생하는 예
    • → 이벤트참여 릴레이션에서 등급 데이터 중복 저장
    • 아이디가 "apple"인 고객의 등급이 "gold"에서 "vip"로 변경되었는데, 일부 투플에 대해서만 등급이 수정된다면 "apple" 고객이 서로 다른 등급을 가지는 모순이 발생

이벤트참여 릴레이션의 갱신 이상

 

 

삭제 이상(Deletion Anomaly)

  • 릴레이션에서 특정 투플을 삭제하면서 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제
  • 삭제 이상이 발생하는 예
    • → 이벤트참여 릴레이션에서 고객 데이터와 이벤트 데이터가 투플로 통합
    • 아이디가 "orange"인 고객이 이벤트 참여를 취소해 관련 투플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객아이디, 고객이름, 등급 데이터까지 손실됨

이벤트참여 릴레이션의 삭제 이상

 

 

 정규화

  • 이상 현상이 발생하지 않도록 릴레이션을 분해(decomposition)하는 과정
  • 함수적 종속성을 판단하여 정규화를 수행함

 

 

함수 종속 (FD : Funtional Dependency)

  • 릴레이션을 구성하는 속성들 간의 관련성

 


 

함수 종속


함수 종속

  • "X가 Y를 함수적으로 결정한다"
    • 릴레이션 내의 모든 투플에서 하나의 X 값에 대한 Y 값이 항상 하나인 조건을 만족
    • 여기서 X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합
    • "Y가 X에 함수적으로 종속되어 있다"라는 표현도 사용
    • X → Y로 표현 (X는 결정자, Y는 종속자)

함수 종속의 표현

 

  함수 종속 관계 판단 예 (1)

  • 고객아이디 속성 값에 대응되는 고객이름 속성과 등급 속성 값이 단 하나인 조건을 만족하여 고객 이름과 등급은 고객아이디에 함수적으로 종속됨

함수 종속 관계 설명을 위한 고객 릴레이션 예

 

고객 릴레이션에 존재하는 함수 종속 관계

 

  함수 종속 다이어그램

함수 종속 관계를 도식화하여 표현한 그림

고객 릴레이션의 함수 종속 다이어그램

 

  함수 종속 관계 판단 시 유의 사항

  • 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 함
    • 속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성값만을 고려하여 판단하면 안됨
  • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
  • 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음

 

 

  함수 종속 관계 판단 예 (2)

함수 종속 관계를 설명하기 위한 릴레이션의 예 : 이벤트 참여 릴레이션

  • 고객이름은 {고객아이디, 이벤트 번호}의 일부분인 고객 아이디에 종속되어 있음
    • 고객 이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됨

이벤트참여 릴레이션에 존재하는 함수 종속 관계
이벤트참여 릴레이션의 함수 종속 다이어그램

 

  완전 함수 종속(FFD : Full Functional Dependency)

  • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 X의 일부분에 대하여 종속되지 않음을 의미
  • 일반적으로 함수 종속은 완전 함수 종속을 의미함
    • ex) 당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속됨

 

  부분 함수 종속(PFD : Partial Functional Dependency)

  • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 X의 일부분에 대하여 함수적으로 종속됨을 의미
    • ex) 고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됨

 

  고려할 필요가 없는 함수 종속 관계

  • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 경우는 결과가 당연한 함수 종속 관계로 고려하지 않음

고려할 필요가 없는 함수 종속 관계의 예


본 게시글은 데이터베이스의 정규화를 학습하기 전 알아야하는 이상 현상과 함수 종속에 대한 개념글이다.

다음 게시글에서 정규화에 대해 포스팅할 예정이다.

728x90
반응형