본문 바로가기
개발/Database

정규화(Normalization)

by BellOne4222 2024. 2. 4.

정규화(Normalization)

  • 데이터를 중복으로 젖아하면 일관되지 않은 데이터, 비정상적인 삽입 갱신 삭제 처리, 디스크 공간 낭비 등 많은 문제를 일으킨다.
  • 중복 데이터를 저장하면서 일으키는 문제점을 없애기 위해서 정보를 주제별로 분할하는 프로그램
  • 테이블 간에 중복된 데이터를 허용하지 않는다.
    • 무결성을 유지 할 수 있다.
      • 데이터를 보호하고, 항상 정상인 데이터를 유지하는 것
    • DB 저장 용량을 줄일 수 있다.

 

정규화 단계

  • 1NF (제 1 정규화)
    • 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
    • 한 컬럼에는 하나의 값만 들어갈 수 있게 하는 것
  • 2NF(제 2정규화)
    • 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
    • 완전 함수 종속
      • 기본키의 부분집합이 결정자가 되어선 안된다.
    • 기본키가 복합키 일때, 기본키의 부분 집합에 의해서 결정될 수 있기 때문에 기존의 테이블에서 복합키를 분해하여 별도의 테이블로 관리하는 방법으로 제 2정규형을 만족시킨다.
  • 3NF(제 3정규화)
    • 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
    • 이행적 종속
      • A -> B, B -> C가 성립 할 때, A -> C가 성립되는 것
    • 이행적 종속을 제거하는 이유
      • B의 데이터를 변경하면 C의 데이터도 그에 맞춰서 변경해야 하기 때문에 번거로움을 해결하기 위해서이다.
    • A를 통해 B를 참조하는 테이블과 B를 통해 C를 참조하는 테이블로 분해해야한다.
  • BCNF 정규화
    • 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것