6. 이상현상, 함수종속, 정규화

파도·2022년 8월 31일
0

1. 정규화의 개념과 이상현상

이상(anomaly) 현상

  • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입·수정 ·삭제 연산을 수행할 때 발생할 수 있는 부작용
  • 정규화
    • 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정

이상 현상의 종류

📌 삽입 이상(insertion anomaly)

  • 릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야 하는 문제

  • [삽입 이상이 발생하는 예]

    • [그림 9-2]의 이벤트 참여 릴레이션은 삽입 이상이 발생함
      • 아직 이벤트에 참여하지 않은 아이디가 "melon"이고, 이름이 "성원용", 등급이 "gold"인 신규 고객의 데이터는 이벤트 참여 릴레이션에 삽입할 수 없음
      • 삽입하려면 실제로 참여하지 않은 임시 이벤트 번호를 참여해야 함

📌 갱신 이상(update anomaly)

  • 릴레이션의 중복된 투플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순ㅇ이 발생하는 문제

  • [갱신 이상이 발생하는 예]

    • [그림 9-2]의 이벤터 참여 릴레이션은 갱신 이상이 발생함
      • 아이디가 "apple"인 고객의 등급이 "gold"에서 "vip"로 변경되었는데, 일부 투플에 대해서만 등급이 수정된다면 "apple"고객이 서로 다른 등급을 가지는 모순이 발생

📌삭제 이상(deletion anomaly)

  • 릴레이션에서 투플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제

  • [삭제 이상이 발생하는 예]

    • [그림 9-2]의 이벤트참여 릴레이션은 삭제 이상이 발생함
      • 아이디가 "orange"인 고객이 이벤트 참여를 취소해 관련 투플을 삭제하게 되면 이벤트 참여 관련이 없는 고객 아이디, 고객 이름, 등급 데이터까지 손실됨

정규화

  • 이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해(decomposition)하는 과정
  • 함수적 종속성을 판단하여 정규화를 수행함

함수적 종속성(FD; Funtional Dependency)

  • 속성들 간의 관련성
  • 함수 종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어 나아가는 과정이 정규화

2. 함수 종속

함수 종속

  • "X가 Y를 함수적으로 결정한다"

    • 릴레이션 내의 모든 투플을 대상으로 하나의 X 값에 대한 Y 값이 항상 하나임
    • X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분집합
    • "Y가 X에 함수적ㅇ으로 종속되어 있다"와 같은 의미
    • ⭐️X → Y로 표현(X는 결정자, Y는 종속자)

함수 종속의 예시(1)


각 고객 아이디 속성 값에 대응되는 고객이름 속성과 등급 속성 값이 단 하나임

(✏️ 정소화라는 고객이 등급을 결정한다고 할 수 있겠는가? NO 동명이인이 있다면 다른 등급을 가질 수 있기에 함수 종속관계가 존재한다고 볼 수 없다)

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

  • 속성 자체의 특성과 의미를 기반으로 종속성을 판단해야 함

    • 속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안 됨(✏️이름의 속성 값 변하면서, 동명이인이 발생할 수 있다)
  • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함

  • 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자고 될 수 있음

함수 종속의 예시(2)

(✏️고객 아이디가 고객이름을 결정/ 고객아이디+이벤트번호가 당첨여부를 결정. * (주의) 고객아이디가 당첨여부를 결정하지 못한다. apple 당첨여부 Y/N 둘 다 존재)

완전 함수 종속(FFD; Full Function Dependecy)

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

부분 함수 종속(PFD; Partial Functional Dependecny)

  • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
    ex) 고객이름은 {고객아이디, 이벤트 번호}에 부분 함수 종속됨
    (✏️ 고객 아이디 하나만으로도 고객이름을 결정할 수 있다)

이행적 함수 종속(transitive FD)

  • 릴레이션을 구성하는 세 개의 속성 집합 X, Y, Z에 대해 함수 종속 관계와 X → Y와 Y → Z가 존재하면 논리적으로 X → Z가 성립되는데, 이것을 Z가 X에 이행적으로 함수 종속되었다고 함

3.기본 정규형과 정규화 과정

정규화(normalization)

  • 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성오디도록 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정

  • 정규화를 통해 릴레이션은 무손실 분해(nonloss decomposition) 이 되어야 함

    • 릴레이션은 의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보의 손실이 발생하지 않아야 함
    • 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함

정규형(NF; Normal Form)

  • 릴레이션이 정규화된 정도
  • 각 정규형마다 제약조건이 존재
    • 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
    • 정규형의 차수가 높아질수록 데이터 중복이 줄어 이상 현상이 발생하지 않는 바람직한 릴레이션이 됨
  • 릴레이션의 특성을 고려하여 적합한 정규형을 선택

제 1 정규형(1NF; First Normal Form)

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값(atomic value)만 가지면 제 1 정규형을 만족함
  • 제 1 정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음

제 1 정규형(1NF)
릴레이션에 속한 모든 속성의 도메인이 원자값으로만 구성되어 있으면 제 1 정규형에 속한다.

이벤트번호/당첨여부 -> 원자값 만족하지 못함

제 1 정규형은 만족하지만 이상 현상이 발생하는 릴레이션 예

→ 삽입 이상: 멜론이라는 고객 이벤트 참여하지 않으면 테이블에 삽입할 수 없다.

→ 갱신 이상: apple이라는 고객이 등급을 gold애서 vip로 변경, 근데 과정 중에 변경 안 되는 행이 존재할 수 있다

→ 삭제 이상: orange라는 고객라는 사람이 이벤트 취소, orange 등급 등등도 삭제 됨

  • 이상 현상의 발생 이유
    • 기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문
  • 문제 해결 방법?
    : 부분 함수 종석이 제거되도록 이벤트참여 릴레이션을 분해
    ⇒ 분해된 릴레이션은 제 2 정규형에 속하게 됨

제 2 정규형(2NF; Second Normal Form)

  • 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이되면 제 2 정규형을 만족함

제 2 정규형(2NF)
릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다.

제 2 정규형은 만족하지만 이상 현상이 발생하는 릴레이션 예

→ 갱신 이상: gold라는 고객의 할인 율 15%로 늘려주자 but, 일부만 갱신

→ 삭제 이상: banana라는 고객 탈퇴, 데이터 손실이 발생

→ 삽입 이상: 브론즈 등급을 하나 더 만들고 싶을 때, 브론즈라는 고객이 한 명도 없다면, 고객 아이디 가질 수 없기에 삽입 불가능

  • 이상 현상의 발생 이유

    • 이행적 함수 종속이 존재하기 때문
  • 문제 해결 방법?
    : 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해 → 분해된 릴레이션은 제 3정규형에 속하게 됨

제 3 정규형(3NF; Third Normal Form)

  • 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않으면 제 3 정규형을 만족함

제 3정규형(3NF)
릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.

(정규화 예제 직전까지 들음)

profile
우당탕탕 / 블로그 이사 중

0개의 댓글