[데이터베이스 개론 9장] 정규화

Mh_Go·2021년 1월 13일
0
post-thumbnail

정규화의 개념과 이상 현상

정규화(normalization)

  • 데이터베이스를 잘못 설계하면 데이터의 삽입, 수정, 삭제 연산을 수행할 때 부작용(이상현상 (anomaly))이 발생
    정규화는 이상 현상이 발생하지 않도록 릴레이션을 분해(decomposition)하는 과정을 의미
    데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용하기도 함

이상 현상의 종류

  • 삽입 이상(insertion anomaly) - 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
  • 갱신 이상(update anomaly) - 중복 투플 중 일부만 변경되어 데이터가 불일치하게 되는 모순의 문제
  • 삭제 이상(deletion anomaly) - 투플을 삭제하면 필요한 다른 데이터까지 함께 삭제되는 데이터 손실의 문제

정규화의 필요성

  • 관련 없는 속성들을 하나의 릴레이션에 모아두고 있으면 여러 이상 현상이 발생
    정규화를 수행하기 위해선 속성들 간의 관련성인 함수적 종속성(Functional Dependency)을 판단해야 함
    일반적으로 릴레이션에 함수적 종속성이 하나 존재하도록 정규화를 통해 릴레이션을 분해

함수 종속

  • 하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라 할 때, 어느 시점에서든 릴레이션 내의 모든 투플에서 하나의 X의 값에 대한 Y의 값이 항상 하나면

    X -> Y (X는 결정자, Y는 종속자)

    'X가 Y를 함수적으로 결정한다' 또는 'Y가 X에 함수적으로 종속되어 있다' 라고 함

  • 함수 종속 관계는 현재 시점에 릴레이션에 포함된 속성 값만으로 판단하면 안 된다는 것을 유의해야 함
    릴레이션에서 속성 값은 계속 변할 수 있기 때문에 속성 자체가 가지고 있는 특성과 의미를 기반으로 판단해야 함

    • 완전 함수 종속 (Full Functional Dependency)
      릴레이션에서 속성 집합 Y가 속성 집합 X에 종속되어 있지만, 속성 집합 X의 일부분에 종속된 것이 아님을 의미
    • 부분 함수 종속 (Partial Functional Dependency)
      속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
      일반적으로 함수 종속이라고 하면 완전 함수 종속을 의미

정규형의 종류

  • 릴레이션이 정규화된 정도는 정규형(Normal Form)으로 표현
    정규형은 크게 기본 정규형과 고급 정규형으로 나뉨

    • 기본 정규형 - 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형
    • 고급 정규형 - 제4정규형, 제5정규형
  • 각 정규형마다 만족시켜야 하는 제약조건이 존재
    릴레이션이 특정 정규형의 제약조건을 만족하면 릴레이션이 해당 정규형에 속한다고 표현
    정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐

  • 일반적으로 차수가 높은 정규형에 속하는 릴레이션일수록 바람직한 릴레이션이나, 모든 릴레이션이 제5정규형에 속해야 되는 것은 아니기에 릴레이션의 특성을 고려해서 적합한 정규형을 선택

제1정규형(1NF)

  • 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있어야 함
    최소한 제1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음

  • 삽입 이상, 갱신 이상, 삭제 이상 발생

  • 릴레이션이 부분 함수 종속을 포함하고 있기 때문

제2정규형(2NF)

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

정규화 과정에서 릴레이션을 분해할 때 주의할 점
분해된 릴레이션들을 자연 조인하여 분해 전의 릴레이션으로 다시 복원할 수 있어야 한다는 것
- 무손실 분해(nonloss decomposition)
릴레이션을 분해했을 때 정보 손실이 발생하지 않아야 함

  • 삽입 이상, 갱신 이상, 삭제 이상 발생
  • 릴레이션이 함수적 종속 관계를 여러 개 포함하고 있어 이행적 함수 종속이 존재하기 때문

제3정규형(3NF)

  • 릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 함
  • 이행적 함수 종속(transitive FD)
    속성집합 X, Y, Z가 존재하고 X->Y, Y->Z 일때, 논리적으로 X->Z가 성립
    이때 Z가 X에 이행적으로 함수 종속 되었다고 함
    함수 종속 관계가 하나의 릴레이션에 여러 개 존재하면 이행적 함수 종속이 나타남

  • 후보키를 여러 개 가지고 있는 릴레이션의 경우 이상현상 발생할 수 있음 따라서 제3정규형도 이상 현상이 발생하는 경우 존재

보이스/코드 정규형(BCNF)

  • 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키가 되어야 함 (강한 제3정규형)
    보이스/코드 정규형에 속하는 모든 릴레이션은 제3정규형에 속하지만, 제3정규형에 속한다고 보이스/코드 정규형에 속하는 것은 아님
  • 3NF → BCNF

제4정규형(4NF)

  • 릴레이션이 보이스/코드 정규형을 만족하면서, 다치 종속(Multi Valued Dependency)을 제거해야 만족

제5정규형(5NF)

  • 릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속(Join Dependency)을 제거해야 만족

실제로 설계 시 무조건 제5정규형에 속하도록 분해해야 하는 것은 아니며, 오히려 제5정규형까지 분해하면 비효율적이고 바람직하지 않은 경우가 존재
일반적으로 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결함

출처 - 김연희저자의 데이터베이스 개론 2판 - 한빛 아카데미

profile
능력있는 DBA가 되고자하는 초짜 DBA

0개의 댓글