[DB] Normalization 정규화 이해하기

728x90

정규화란 무엇인가?

정규화는 데이터베이스의 테이블을 설계할 때 데이터를 중복 없이 구성하고, 이상(Anomalies)을 제거하는 과정이다.
이를 통해 데이터 일관성을 유지하고 효율적인 데이터베이스를 설계할 수 있다.

 

정규화의 목적

  1. 데이터 중복 제거: 중복으로 인한 저장 공간 낭비를 줄인다.
  2. 데이터 무결성 보장: 삽입, 삭제, 갱신 시 이상 현상을 방지한다.
  3. 데이터 유지보수성 향상: 데이터를 논리적으로 분리하여 변경이 쉬워진다.

정규화를 하지 않은 데이터베이스는 삭제, 삽입, 수정 작업에서 문제가 발생할 수 있다. 이를 이상현상(Anomaly)이라고 하며, 주요 사례는 다음과 같다.

 

삭제 이상(Delete Anomaly)

  • 데이터를 삭제하면 의도치 않게 관련된 다른 정보도 삭제되는 문제.
  • 예시: 선수 데이터를 삭제하면 "스포츠 경영학" 과목 정보도 손실됨.

삽입 이상(Insert Anomaly)

  • 새로운 데이터를 추가하려 할 때, 특정 속성값이 없으면 NULL 값을 삽입해야 하는 문제.
  • 예시: 신입생의 정보를 추가하려면 아직 등록하지 않은 강좌 정보를 NULL로 남겨야 함.

수정 이상(Update Anomaly)

  • 중복된 데이터의 일부만 수정되어 데이터 불일치가 발생하는 문제.
  • 예시: "데이터베이스" 강의실을 수정했는데, 일부 튜플에서 강의실 정보가 여전히 이전 값으로 남아 있음.

 

단계별 정규화

제1 정규형(1NF)

조건: 모든 열의 값이 원자값(Atomic Value)이어야 한다.

  • 문제: 하나의 셀에 여러 값이 들어가 있는 경우.
  • 해결: 하나의 컬럼에 하나의 값만 포함되도록 분리.

 

제2 정규형(2NF)

조건: 1NF를 만족하고, 기본키의 부분 종속성이 없어야 한다.

  • 부분 종속성: 기본키의 일부만으로 다른 속성을 결정할 수 있는 경우.
  • 해결: 부분 종속 관계를 분리하여 독립된 테이블로 나눔.

 

제3 정규형(3NF)

조건: 2NF를 만족하고, 기본키가 아닌 열이 이행적 종속성(Transitive Dependency)이 없어야 한다.

  • 이행적 종속성: A → B, B → C 관계에서 A가 C를 결정하는 경우.
  • 해결: 이행적 종속 관계를 제거하고 독립된 테이블로 분리.

 

정규화의 장단점

장점

  • 데이터 무결성 유지: 중복을 제거하여 데이터 불일치 방지.
  • 저장 공간 최적화: 중복된 데이터로 인한 낭비 감소.
  • 유지보수 용이: 테이블 설계가 단순해지고 수정 작업이 쉬워짐.

단점

  • 성능 저하: 테이블 간 JOIN 연산이 늘어나면 조회 속도가 느려질 수 있음.
  • 복잡성 증가: 설계와 구현이 복잡해질 수 있음.
728x90