Database/Database 기초

정규화

Debin 2021. 11. 1.
반응형

2022. 12. 13. 22:40 수정 및 복습 시작

정규화

  • 정규화는 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용하기도 한다. 
  • 두 가지 설계 방법(관계 데이터 모델 기반 데이터베이스 설계, 정규화)은 데이터베이스 설계 결과물이 비슷한 수준이다.
    상황에 따라 적절한 방법을 선택하면 된다.
  • 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때 부작용이 발생할 수 있다.
  • 이러한 부작용을 이상 현상이라고 한다.
  • 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화다.

이상 현상 (3가지)

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

정규화는 이상 현상이 발생하지 않도록, 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이다.

정규화를 통해 릴레이션 설계를 올바르게 완성할 수 있다.

정규화를 수행하려면 먼저 릴레이션을 구성하는 속성들 간의 관련성을 판단할 수 있어야 한다.

정규화 과정에서 고려해야 하는 속성들 간의 관련성을 함수적 종속성이라고 한다.

일반적으로 릴레이션에 함수적 종속성이 하나 존재하도록 정규화를 통해 릴레이션을 분해한다.

함수 종속

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

함수 종속의 표현

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

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

완전 함수 종속

  • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만,
    속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미.
  • 일반적으로 함수 종속은 완전 함수 종속을 의미함.

부분 함수 종속

  • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미.

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

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

정규형

정규화 개념

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

정규형

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

아래는 정규형의 종류이다.

정규형의 종류

제 1 정규형

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

제 2 정규형

  • 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형을 만족함.
  • 제 1 정규형에 속하는 릴레이션이 제 2 정규형을 만족하게 하려면? -> 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해.

이행적 함수 종속

 

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

제 3 정규형

  • 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형을 만족함.
  • 제 2 정규형에 속하는 릴레이션이 제 3 정규형을 만족하게 하려면? -> 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해.

보이스/코드 정규형 

  • 필요성: 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3 정규형까지 모두 만족해도 이상 현상이 발생할 수 있음
  • 의미:
    강한 제 3 정규형 - 후보키를 여러 개 가지고 있는 릴레이션에 발생할 수 있는 이상 현상을 해결하기 위해 제 3 정규형보다 좀 더 엄격한 제약 조건을 제시한다.
    보이스/코드 정규형에 속하는 모든 릴레이션은 제 3 정규형에 속하지만,
    제 3 정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하는 것은 아님.

릴레이션의 함수 종속 관계에서 모든 결정자가 후보 키이면 보이스/코드 정규형에 속한다.

제 4 정규형

  • 릴레이션이 보이스/코드 정규형을 만족하면서,
  • 함수 종속이 아닌 다치 종속(MVD : Multi Valued Dependency)을 제거하면 제 4 정규형에 속함.

제 5 정규형

  • 릴레이션이 제 4 정규형을 만족하면서, 후보키를 통하지 않는 조인 종속 (JD : Join Dependency)을 제거하면 제 5 정규형에 속함.

정규화 시 주의사항

  • 모든 릴레이션이 제 5 정규형에 속해야만 바람직한 것은 아님.
  • 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많음.

정규화 과정

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

 

2022. 12. 13. 23:30 수정 및 복습 완료

반응형

댓글