내 잡다한 노트

데이터 정규화(Normalization) 본문

DB

데이터 정규화(Normalization)

peanutwalnut 2024. 12. 9. 16:11

**데이터 정규화(Normalization)**는 데이터베이스 설계에서 중복을 최소화하고 데이터의 일관성을 유지하기 위해 데이터를 구조화하는 과정입니다. 정규화는 데이터를 여러 테이블로 나누고, 각 테이블을 논리적으로 연결하여 효율적이고 관리하기 쉬운 구조를 만듭니다.


정규화의 목표

  1. 데이터 중복 제거: 중복된 데이터를 줄여 저장 공간을 절약.
  2. 데이터 무결성 보장: 데이터 변경 시 일관성을 유지.
  3. 유연성 향상: 데이터 구조 변경 시 영향을 최소화.
  4. 데이터 관리 용이성: 삽입, 삭제, 갱신 시 이상현상(Anomaly) 방지.

정규화 단계

정규화는 여러 단계로 이루어지며, 각 단계는 특정 규칙을 만족합니다. 주요 단계는 다음과 같습니다:

1. 제1정규형 (1NF):

  • 모든 열이 **원자값(Atomic Value)**만 포함하도록 테이블을 정리합니다.
  • 중첩된 값이나 반복되는 그룹을 제거합니다.

예시:

고객ID이름구매상품

1 홍길동 상품A, 상품B
2 김영희 상품C
  • 문제: 구매상품 열에 여러 값이 포함되어 있어 비원자적.
  • 1NF로 변환:고객ID이름구매상품
    1 홍길동 상품A
    1 홍길동 상품B
    2 김영희 상품C

2. 제2정규형 (2NF):

  • 부분 함수 종속을 제거합니다.
    • 즉, 기본 키의 일부에만 종속된 컬럼을 별도의 테이블로 분리합니다.
  • 1NF를 만족한 상태에서, 기본 키에 종속되지 않은 데이터를 분리합니다.

예시 (1NF 상태):

주문ID고객ID고객이름상품명

101 1 홍길동 상품A
102 2 김영희 상품C
  • 문제: 고객이름은 고객ID에만 종속되며, 주문ID와는 관계없음.
  • 2NF로 변환:
    고객 테이블:고객ID고객이름
    1 홍길동
    2 김영희
    주문 테이블:주문ID고객ID상품명
    101 1 상품A
    102 2 상품C

3. 제3정규형 (3NF):

  • 이행적 함수 종속을 제거합니다.
    • 즉, 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 종속되는 것을 방지합니다.
  • 2NF를 만족한 상태에서 추가적인 종속성을 제거합니다.

예시 (2NF 상태):

주문ID고객ID고객이름고객주소

101 1 홍길동 서울특별시
102 2 김영희 부산광역시
  • 문제: 고객주소는 고객ID에 종속되며, 주문ID와 직접적인 관계가 없음.
  • 3NF로 변환:
    고객 테이블:고객ID고객이름고객주소
    1 홍길동 서울특별시
    2 김영희 부산광역시
    주문 테이블:주문ID고객ID
    101 1
    102 2

정규화의 장점

  1. 데이터 무결성 보장:
    • 데이터가 중복되지 않아, 데이터 변경 시 일관성을 유지.
  2. 저장 공간 절약:
    • 중복 데이터를 제거하여 효율적으로 저장.
  3. 유연성 증가:
    • 데이터 추가, 삭제, 수정 작업이 쉬워짐.

정규화의 단점

  1. 복잡한 쿼리:
    • 데이터를 여러 테이블로 나누기 때문에 조인(Join)이 많아져 쿼리가 복잡해질 수 있음.
  2. 읽기 성능 저하:
    • 정규화된 데이터베이스는 읽기 작업에서 성능이 저하될 수 있음.
  3. 비정규화 필요성:
    • 성능이 중요한 시스템에서는 정규화를 일부 포기하고 비정규화를 통해 데이터를 중복 저장하기도 함(캐싱, 조회 최적화).

정규화와 비정규화의 균형

  • 읽기 성능이 중요한 경우: 일부 비정규화를 허용.
  • 데이터 일관성이 중요한 경우: 높은 수준의 정규화를 유지.
  • 시스템 요구사항에 따라 정규화와 비정규화를 적절히 조합해야 최적의 설계를 할 수 있습니다.

'DB' 카테고리의 다른 글

DB에서 Join 이란?  (0) 2024.12.09
Cache의 갱신 방식  (0) 2024.12.09
트랜잭션(Transaction)  (1) 2024.12.09
DB에서 ACID 성질  (0) 2024.12.09