[DB] 정규화

각 정규형에 대한 정규화 방법을 알아보자.
Hi's avatar
May 06, 2024
[DB] 정규화

✅ 정규화란?

📋
정규화는 데이터베이스 설계에서 중복을 최소화하고 데이터의 일관성과 무결성을 유지하기 위해 사용된다. 주로 엔터티 간의 중복 데이터를 줄이고, 데이터 이상 현상을 방지하기 위해 적용된다. 관계형 데이터베이스 설계에서는 주로 제 1정규화, 제 2정규화, 제 3정규화, Boyce-Codd 정규화 등이 사용된다.
 
 

✅ 정규형

notion image
  • 정규화 과정에서 관계가 만족해야 하는 특정한 함수 종속성의 충족 조건
    • → 특정 정규형이 요구하는 충족 조건을 관계가 만족하면 해당 수준의 정규형을 충족함을 의미한다.
  • 제 3정규형 이상의 정규형을 충족하면 충분한 정규화가 이루어졌다고 본다.
    • → 보통 제 3정규형 또는 보이스-코드 정규형까지만 정규화를 진행한다.
       
 

✅ 제 1정규형 (1NF)

정의

📋
관계 R에 속한 모든 속성의 도메인이 원자값을 갖는 경우에, 관계 R은 제 1정규형이라 한다.
 

비정규 관계를 제 1정규형 관계로 정규화하는 방법

notion image
  • n개의 다중값을 갖는 속성을 n개의 속성으로 분리한다.
  • 정규화 대상인 관계가 관계형 데이터 모델의 기본 원칙을 따르기만 한다면 제 1정규형에 속한다.
 

제 1정규형의 문제점

notion image
  1. 삽입 이상
    1. → 과목 번호가 c006인 과목의 개설학과가 통계학과라는 사실만 따로 삽입할 수 없다.
  1. 수정 이상
    1. → 컴퓨터학과의 학과장이 박유찬에서 홍길동으로 변경될 경우, 과목개설학과가 컴퓨터인 모든 튜플을 찾아 학과장 속성 값을 한꺼번에 홍길동으로 변경해야 함.
  1. 삭제 이상
    1. → 만약, 학번 s002 학생이 과목번호 c002 과목 수강을 취소하여 이 튜플을 삭제하면 c002 과목의 개설학과가 경영학과이고 학과장이 김철수라는 정보까지 데이터베이스에서 함께 삭제됨.
 

제 1정규형의 문제점을 해결하기 위해 정규화

notion image
notion image
이로써 부분 함수 종속성이 사라지게 된다.
 
 
 

✅ 제 2정규형 (2NF)

정의

📋
관계 R이 제 1정규형이고, 기본 키에 해당하지 않는 모든 속성이 기본키에 완전 종속인 형태일 때, 이 관계 R을 제 2정규형이라 한다.
 

제 2정규형인지 점검하는 방법

notion image
  • 제 2정규형은 제 1정규형을 충족하는 관계의 기본키가 복합 속성(속성이 2개 이상)일 때, 기본키의 일부 속성이 결정자인지(즉, 부분 함수 종속성이 있는지)를 검사한다.
  • 만약 기본키가 단일 속성이면, 모든 속성이 완전 함수 종속이므로 검사할 필요가 없이 제 2정규형에 속한다.
 

제 2정규형의 문제점

notion image
  1. 삽입 이상
      • 과목 개설 학과인 통계학과의 학과장이 홍장미라는 사실만 따로 삽입할 수 없다.
  1. 수정 이상
      • 컴퓨터학과의 학과장이 박유찬에서 홍길동으로 변경될 경우, 여전히 과목 개설 학과가 컴퓨터인 모든 튜플을 찾아 학과장 속성 값을 한꺼번에 홍길동으로 변경해야 한다.
  1. 삭제 이상
      • 과목번호 c002의 등록을 취소하여 이 튜플을 삭제하면 경영학과의 학과장이 김철수라는 원하지 않은 정보까지 함께 삭제된다.
 

제 2정규형을 충족하는 데도 위와 같은 이상이 발생하는 이유

📋
아직도 둘 이상의 의미적 연관성을 하나의 관계로 함께 표현했기 때문이다.
 

이행적 함수 종속성

  • 기본키에 속하지 않은 일반 속성 값이 기본키에 속하지 않은 또 다른 일반 속성 값을 결정한다.
  • 해결방법: 이행적 종속 관계를 끊어 두 종속 관계를 각기 다른 관계에 표현한다. 즉, 2개의 관계로 분해한다.
notion image
notion image
 
 

✅ 제 3정규형 (3NF)

정의

📋
어떤 관계 R이 제 2정규형이고, 기본 키에 속하지 않는 모든 속성이 기본키에 대해 이행적 종속이 아니면, 관계 R은 제 3정규형이다.
 

제 3정규형 점검 방법

  • 제 3정규형은 제 2정규형을 충족하는 관계의 기본키가 아닌 일반 속성이 결정자인지를 검사한다.
  • 일반 속성이 기본키 속성이 아닌 일반 속성에 종속적일 때 제 3정규형에 위배된다.
notion image
 

제 3정규형의 문제점

notion image
  1. 삽입 이상
      • 과목번호 c004의 강의담당교수가 p005라는 사실만 따로 삽입할 수 없다.
  1. 수정 이상
      • 강의담당교수 p001의 담당 과목번호가 c005로 변경될 경우, p001과 관련된 모든 튜플을 찾아 과목번호 속성 값을 한꺼번에 c005로 변경해야 한다.
  1. 삭제 이상
      • 학번 s002인 학생이 교과번호 c002의 수강을 취소하여 이 튜플을 삭제하면 p002 교수가 c002 과목을 강의한다는 정보까지 함께 삭제된다.
       

제 3정규형을 충족하는 데도 위와 같은 이상이 발생하는 이유

  • 원인: 기본키가 아닌 속성이 기본키 일부 속성의 결정자가 되기 때문이다.
  • 관계의 후보 키가 둘 이상이고 기본 키가 둘 이상의 조합일 때 발생한다.
 

제 3정규형의 문제점 해결

📋
이러한 문제를 해결하려면 기본키가 아닌 결정자를 분리하여 2개의 관계로 분해해야 한다.
notion image
 
 

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

  • 모든 결정자를 후보키로 만든다. 즉, 기본키가 아니면서 결정자 역할을 하는 속성과 그 결정자에 함수 종속이 되는 속성을 하나의 관계로 분리한다.
  • 이때, 결정자는 원 관계에도 남겨서 외래키 역할을 하도록 한다.
notion image
Share article

soultree