[SQLD] 함수적 종속성과 정규화

잠이보약·2023년 9월 2일

자격증

목록 보기
7/7

정규화와 이상현상, 함수적 종속성

  1. 정규화

    • 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정
    • 함수적 종속성을 판단하여 정규화를 수행함
  2. 이상현상

    • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
    • 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
    • 갱신 이상: 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
    • 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
  3. 함수적 종속성(FD: Functional Dependency)

    1. 함수 종속: X가 Y를 함수적으로 결정한다
      • 릴레이션 내의 모든 튜플에서 하나의 X값에 항상 하나의 Y값이 대응
      • X, Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합
      • X는 결정자, Y는 종속자
      • X → Y로 표현
    2. 함수 종속 관계 판단 시 유의사항
      • 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 함
      • 일반적으로 기본 키와 후보 키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
      • 기본 키나 후보 키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음
    3. 함수 종속의 유형
      1. 완전 함수 종속
        • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미.
        • 일반적으로 함수 종속은 완전 함수 종속을 의미
      2. 부분 함수 종속
        • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
      3. 이행적 함수 종속
        • 릴레이션을 구성하는 3개의 속성 집합 X, Y, Z에 대한 함수 종속 관계
        • X → Y, Y → Z가 존재하면 X → Z가 성립
        • 이 때, Z가 X에 이행적으로 함수 종속되었다고 함
      4. 고려할 필요가 없는 함수 종속 관계
        • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않음
  4. 기본 정규형과 정규화 과정

    1. 정규화의 목표
      • 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어가는 과정
      • 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현
    2. 주의사항
      • 정규화를 통해 릴레이션은 무손실 분해되어야 함
      • 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 하고, 분해로 인한 정보 손실이 발생하지 않아야 함
      • 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함
  5. 정규형

    • 릴레이션이 정규화된 정도
    • 각 정규형마다 제약조건이 존재
    • 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
    • 높은 차수의 정규형은 보다 낮은 차수의 정규형이 갖는 특성을 모두 포함
    • 릴레이션의 특성을 고려해서 적합한 정규형을 선택
    1. 제1정규형(1NF)

      • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값만 가지면 제1정규형을 만족
      • 제1정규형을 만족하지 않는 릴레이션
      • 제1정규형을 만족하는 릴레이션
      • 제1정규형을 만족하지만 이상 현상이 발생하는 릴레이션
      • 이상 현상이 발생하는 이유: 기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문
      • 문제 해결 방법: 부분 함수 종속이 제거되도록 이벤트참여 릴레이션을 분해
    2. 제2정규형(2NF)

      • 릴레이션이 제1정규형에 속하고, 기본 키가 아닌 모든 속성이 기본 키에 완전 함수 종속되면 제2정규형을 만족함
      • 제1정규형을 만족하는 릴레이션에 대해, 부분 함수 종속을 제거하고 모든 속성이 기본 키에 완전 함수 종속되도록 분해
      • 제1정규형을 만족하지만, 제2정규형을 만족하지 않는 릴레이션
      • 제2정규형을 만족하도록 분해한 릴레이션
      • 제2정규형을 만족하지만 이상 현상이 발생하는 릴레이션
      • 이상 현상이 발생하는 이유: 이행적 함수 종속이 존재하기 때문
      • 문제 해결 방법: 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해
    3. 제3정규형(3NF)

      • 릴레이션이 제2정규형에 속하고, 기본 키가 아닌 모든 속성이 기본 키에 이행적 함수 종속이 되지 않으면 제3정규형을 만족함
      • 제2정규형을 만족하는 릴레이션에 대해, 모든 속성이 기본 키에 이행적 함수 종속이 되지 않도록 분해
      • 제2정규형을 만족하지만, 제3정규형을 만족하지 않는 릴레이션
      • 제3정규형을 만족하도록 분해한 릴레이션
    4. 보이스-코드 정규형(BCNF)

      • 필요성: 하나의 릴레이션에 여러 개의 후보 키가 존재하는 경우, 제3정규형까지 모두 만족해도 이상 현상이 발생할 수 있음

      • 의미: 강한 제3정규형
        - 후보 키를 여러 개 가지고 있는 릴레이션에 발생할 수 있는 이상 현상을 해결하기 위해 제3정규형보다 더 엄격한 제약조건을 제시

        • 보이스-코드 정규형에 속하는 모든 릴레이션은 제3정규형에 속하지만, 제3정규형에 속하는 모든 릴레이션이 보이스-코드 정규형에 속하는 것은 아님
      • 제3정규형을 만족하지만 이상 현상이 발생하는 릴레이션

      • 이상 현상이 발생하는 이유: 담당강사번호가 후보키가 아님에도 인터넷강좌 속성을 결정하기 때문

      • BCNF를 만족하도록 분해한 릴레이션

  6. 유의 사항

    • 정규화 차수가 높을 수록 성능이 개선되는 것은 아님
    • 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많음
    • 정규화로 인한 성능 저하 시, 반정규화를 고려
profile
백엔드 개발자 지망생

0개의 댓글