DB/SQL

데이터 정규화의 정의, 목적, 단계(1NF~3NF), 장단점, 그리고 실무 적용까지

로기221 2025. 5. 22. 09:44
728x90
반응형

 

데이터 정규화(Normalization)란?

데이터 정규화는 데이터베이스 설계에서 데이터의 중복을 최소화하고, 데이터 무결성과 일관성을 유지하기 위해 테이블을 구조화하는 과정이다. 즉, 데이터를 논리적으로 여러 개의 테이블로 분해하여 불필요한 중복을 제거하고, 삽입·수정·삭제 시 발생할 수 있는 이상현상(Anomaly)을 방지하는 것이 목적이다.

 

 

정규화의 목적

  • 데이터 중복 최소화: 같은 데이터가 여러 곳에 저장되는 것을 방지.
  • 데이터 무결성 유지: 데이터의 일관성과 정확성을 보장.
  • 이상현상 방지: 삽입, 삭제, 갱신 시 발생할 수 있는 데이터 불일치 문제(Anomaly) 해결.
  • 유지보수 용이: 데이터 구조 변경이나 확장 시 재설계 부담 감소.

 

 

정규화의 단계와 예시

정규화는 여러 단계(정규형, Normal Form)로 나뉘며, 실무에서는 주로 1NF~3NF까지 적용한다.

 

 

1. 데이터베이스 정규화 예제

 

비정규형 테이블

OrderID Customer ProductIDs
1 John 101, 102, 103
2 Jane 104

 

제1정규형 (1NF)

  • 의미: 테이블의 모든 컬럼이 원자값(atomic value, 더 이상 나눌 수 없는 값)을 갖도록 함.
  • 예시: 한 컬럼에 여러 값(예: "010-1234-5678, 031-123-4567")이 들어가 있다면, 각각의 값이 별도의 행이나 컬럼에 들어가도록 분리.

제1정규형(1NF)으로 변환

OrderID Customer ProductIDs
1 John 101
1 John 102
1 John 103
2 Jane 104

설명: 한 셀에 여러 값이 있던 ProductIDs를 각각의 행으로 분리하여 원자값만 남기도록 함

 

제2정규형 (2NF)

  • 의미: 1NF를 만족하면서, **기본키의 부분집합에만 종속된 속성(부분 함수 종속)**을 제거.
  • 예시: 복합키(예: 학생번호, 과목명)로 이루어진 테이블에서, 일부 컬럼(예: 강사명)이 전체 키가 아니라 과목명에만 종속된다면, 강사명 정보를 별도 테이블로 분리.

제2정규형(2NF) 예시

OrderID ProductID Customer ProductName
1 101 John Widget A
2 102 Jane Widget B

→ 2NF로 분해

  • Order 테이블
  • OrderIDCustomer
    1 John
    2 Jane
  • Product 테이블
  • ProductIDProductName
    101 Widget A
    102 Widget B
  • OrderProduct 테이블
  • OrderIDProductID
    1 101
    2 102
    설명: 부분 함수 종속성을 제거하여 중복을 최소화.

 

제3정규형 (3NF)

  • 의미: 2NF를 만족하면서, **기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속(이행적 종속)**되지 않도록 분리.
  • 예시: 학생 테이블에서 지도교수, 학과가 있을 때, 학과가 지도교수에 의해 결정된다면, 학과 정보를 별도 테이블로 분리.

제3정규형(3NF) 예시

OrderID CustomerID Customer NameProductID
1 1 John 101
2 2 Jane 102

→ 3NF로 분해

  • Order 테이블
  • OrderIDCustomerID
    1 1
    2 2
  • Customer 테이블
  • CustomerIDCustomerName
    1 John
    2 Jane
  • Product 테이블
  • ProductIDProductName
    101 Widget A
    102 Widget B
  • OrderProduct 테이블
  • OrderIDProductID
    1 101
    2 102
    설명: 이행적 종속성을 제거하여 데이터 중복을 더욱 최소화

 

(고급) BCNF, 4NF, 5NF

  • 실무에서는 대부분 3NF까지 적용하며, 특수한 상황에서 BCNF, 4NF, 5NF까지 적용하기도 한다.

 

정규화의 장점과 단점

장점 단점
데이터 중복 감소 복잡한 JOIN 쿼리 필요
데이터 무결성 보장 성능 저하 가능성(읽기 성능)
저장 공간 효율화 설계 및 관리 복잡성 증가
데이터 구조 변경 용이 트랜잭션 처리 복잡성

 

 

정규화가 필요한 이유

정규화를 하지 않으면 다음과 같은 "이상현상(Anomaly)"이 발생할 수 있다

  • 삽입 이상: 일부 데이터만 추가하고 싶어도 다른 정보까지 같이 입력해야 하는 문제
  • 삭제 이상: 한 정보만 삭제하고 싶어도 관련된 다른 정보까지 삭제되는 문제
  • 갱신 이상: 중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 문제

 

정규화 vs. 비정규화

정규화는 데이터 무결성과 중복 최소화에 초점을 두지만, 읽기 성능이 중요한 환경(예: 데이터 분석, 리포트 등)에서는 일부러 비정규화(denormalization)를 적용하여 성능을 높이기도 한다.

 

 

마무리

데이터 정규화는 데이터베이스의 기본이자 핵심 설계 원칙이다. 데이터의 중복을 줄이고, 무결성을 보장하며, 유지보수와 확장성을 높일 수 있다. 하지만 무조건 높은 단계로 정규화하는 것이 능사는 아니며, 시스템의 목적과 특성에 따라 적절한 수준의 정규화를 적용하는 것이 중요하다..

 

728x90
반응형