[DB] 정규화

이민선(Jasmine)·2024년 5월 27일
0

[CS] 데이터베이스

목록 보기
2/2
post-thumbnail

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

  • 이상(anomaly) 현상
    • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용. 이벤트 참여 고객 릴레이션으로 예를 들어보자. 기본키는 (고객 아이디, 이벤트 번호이다.)
      • 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제. ex. 아직 이벤트에 참여하지 않은 melon을 삽입하려면 참여하지 않은 이벤트 번호를 삽입하거나 Null을 삽입 해야 함. 이벤트번호는 기본키 중 하나이므로 삽입 불가!
      • 갱신 이상: 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제. ex. 고객의 등급이 vip로 변경되었는데, 일부 투플만 변경하여 데이터 불일치 발생.
      • 삭제 이상: 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제. ex. 고객이 이벤트 참여를 취소했는데, 고객의 아이디, 이름, 등급까지 삭제되어 데이터 손실 발생.
  • 정규화
    • 이상현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정
    • 이상현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해(decomposition)하는 과정
    • 함수적 종속성을 판단하여 정규화를 수행함
      • 함수적 종속성(FD; Functional Dependency)
      • 속성들 간의 관련성
    • 함수 종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상 현상이 발생하지 않는 바람직한 릴레이션으로 만들어나가는 과정이 정규화이다.

2. 함수 종속

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

    • 릴레이션 내의 모든 투플을 대상으로 하나의 X값에 대한 Y값이 항상 하나임. (하나의 X값에 대해 여러개의 Y값이 도출되면 함수가 아니다.)
    • X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분집합
    • "Y가 X에 함수적으로 종속되어 있다"와 같은 의미
    • X -> Y로 표현(X는 결정자, Y는 종속자)
      • ex. 고객 아이디 -> 고객 이름, 고객 아이디 -> 등급, 고객 아이디 -> (고객 이름, 등급). 고객 이름과 등급 사이에는 함수 종속 관계가 없다. (동명이인 고려)
    • 함수 종속 다이어그램: 함수 종속 관계를 도식화하여 표현한 것.
  • 함수 종속 관계 판단 시 유의 사항

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

    • 완전 함수 종속 (FFD; Full Functional Dependency)
      • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미
      • 일반적으로 함수 종속은 완전 함수 종속을 의미
      • ex. 당첨 여부는 {고객 아이디, 이벤트 번호}에 완전 함수 종속됨
    • 부분 함수 종속 (PFD; Partial Functional Dependency)
      • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
      • ex. 고객 이름은 {고객 아이디, 이벤트 번호}에 부분 함수 종속됨.
  • 이행적 함수 종속(transitive FD)

    • 릴레이션을 구성하는 세 개의 속성 집합 X -> Y -> Z에 대해 함수 종속 관계 X -> Y와 Y -> Z가 존재하면 논리적으로 X -> Z가 성립되는데, 이것을 Z가 X에 이행적으로 함수 종속되었다고 함.
    • ex. 고객 id -> 등급 -> 할인율이면 고객 id -> 할인율
  • 고려할 필요가 없는 함수 종속 관계

    • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않음.

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

  • 정규화(normalization)

    • 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 이상 현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정
    • 정규화를 통해 릴레이션은 무손실 분해(nonloss decomposition)되어야 함
      • 릴레이션은 의미적으로 동등한 릴레이션으로 분해되어야 하고 분해로 인한 정보의 손실이 발생하지 않아야 함
      • 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함
  • 정규형(NF; Normal Form)

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

    • 릴레이션의 모든 속성이 더는 분해되지 않는 원자값(atomic value)만 가지면 (다중값을 가지지 않으면) 제 1정규형을 만족함
    • 제 1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음.
    • 원자값만 가지더라도, 이상 현상 (삽입 이상, 갱신 이상, 삭제 이상)이 발생할 우려 있음.
profile
기록에 진심인 개발자 🌿

0개의 댓글