Database - 정규화

choko's avatar
Jun 29, 2024
Database - 정규화
  • 제 1 정규화
    • 원자값이 아닌 도메인 분해
  • 제 2 정규화
    • 부분적 함수 종속 제거
  • 제 3 정규화
    • 이행적 함수 종속 제거
  • BNCF 정규화
    • 결정자이면서 후보키가 아닌 것 제거

 
 
 
 

정규화 등장 배경

  • 한 릴레이션에서 여러 엔티티의 애트리뷰트들을 혼합하면, 갱신 이상이 발생할 수 있다.
    • 갱신 이상 : 중복된 정보들을 한 릴레이션에는 변경하고, 다른 릴레이션에는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 된다.
    • 갱신 이상 종류
      • 삽입 이상 : 원하지 않는 자료가 삽입됨, 삽입하는데 자료가 부족해 삽입이 안됨
      • 삭제 이상 : 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨
      • 수정 이상 : 부정확 / 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어짐
 
 

정규화

  • 데이터베이스 정규화를 통해, 테이블 간 중복 데이터를 허용하지 않고, 무결성 유지 / DB 저장 용량 감소를 목표로 한다.
  • 정규화의 종류
    • 제 1 정규화
      • 테이블의 컬럼이 원자값(하나의 값)을 갖도록 한다
        • notion image
          → 이렇게 짜면 제 1 정규화에 위배
           
    • 제 2 정규화
      • 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
        • notion image
        • 위 테이블에서, 강의실은 강좌 이름에 의해 결정된다. → 완전 함수 종속
        • 다음과 같이 분해해주자
        • notion image
         
    • 제 3 정규화
      • 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
        • 이행적 종속: A→B, B->C가 성립할 때 A→C가 성립되는 것
        • notion image
        • (학생 번호 → 강좌이름, 강좌이름 → 수강료) ⇒ 학생번호 → 수강료
        • 다음과 같이 분해해주자
        • notion image
         
    • BNCF 정규화(보이스-코드 정규화 )
      • 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는것
        • notion image
        • 위 테이블에서 기본키는 (학생번호, 특강이름)이다.
          • 여기서 기본키는 교수를 결정하고 있다.
          • 또, 교수는 특강이름을 결정하고 있다.
          • 즉, 후보키 집합에 속하지 않은 결정자가 존재하는 것이다
        • BNCF를 만족하기 위해, 테이블을 다음과 같이 분리해준다.
          • notion image
Share article

Tom의 TIL 정리방