24.12.13 TIL RDBMS의 정규화

신성훈·2024년 12월 13일

TIL

목록 보기
99/162

1. 정규화란?

정규화는 데이터베이스 설계 과정에서 데이터의 중복을 최소화하고 무결성을 보장하기 위한 방법론입니다.
테이블 구조를 체계적으로 정리하여 불필요한 데이터 중복을 제거하고, 데이터 저장 공간을 효율적으로 사용하는 것을 목표로 합니다.


2. 정규화의 장점

  • 데이터 중복 최소화: 저장 공간 절약, 일관성 유지
  • 데이터 무결성 보장: 중복으로 인한 수정/삭제 시 데이터 불일치 방지
  • 효율적인 데이터 관리: 데이터 변경 시 최소한의 수정으로 유지
  • 이상(Anomaly) 제거:
    • 삽입 이상: 불필요한 데이터 삽입 없이 데이터를 추가 가능
    • 갱신 이상: 중복 데이터로 인해 발생하는 비일관성 제거
    • 삭제 이상: 데이터 삭제 시 다른 데이터 손실 방지

3. 정규화 과정

1NF (제 1 정규형):

  • 모든 속성이 원자값(Atomic Value)을 가져야 함
  • 테이블에 중첩된 데이터나 반복되는 그룹이 없어야 함
  • 예시
    비정규형 테이블:
    학생ID | 이름   | 수강과목  
    101   | Alice  | 수학, 영어  
    102   | Bob    | 과학  
    -> 정규화(1NF):
    학생ID | 이름   | 수강과목  
    101   | Alice  | 수학  
    101   | Alice  | 영어  
    102   | Bob    | 과학  

2NF (제 2 정규형):

  • 1NF를 만족하고, 부분 함수 종속 제거

  • 테이블의 모든 속성이 기본 키에 전적으로 의존해야 함

  • 예시

    학생ID | 과목코드 | 과목명  
    101   | MATH101 | 수학  
    101   | ENG102  | 영어  

    -> 정규화(2NF):

    학생ID | 과목코드  
    101   | MATH101  
    101   | ENG102  
    
    과목코드 | 과목명  
    MATH101 | 수학  
    ENG102  | 영어  

3NF (제 3 정규형):

  • 2NF를 만족하고, 이행적 함수 종속 제거
  • 기본 키가 아닌 속성 간의 종속성을 제거
  • 예시
    학생ID | 과목코드 | 교수ID | 교수명  
    -> 정규화(3NF):
    학생ID | 과목코드 | 교수ID  
    교수ID | 교수명  

4. 정규화의 한계

  • 복잡한 쿼리: 정규화로 인해 다수의 테이블 간 JOIN 연산이 발생
  • 성능 저하: 실시간 쿼리 성능이 중요한 환경에서는 과도한 정규화가 비효율적일 수 있음
  • 역정규화(Denormalization): 정규화의 단점을 보완하기 위해 데이터 중복을 허용하여 성능을 최적화

5. 마무리

정규화는 데이터베이스 설계에서 기본적인 원칙으로, 데이터 무결성을 유지하고 공간 효율성을 높이는 데 매우 중요합니다. 하지만 모든 상황에서 정규화가 최선은 아니며, 프로젝트의 특성과 성능 요구에 따라 정규화와 역정규화를 적절히 조합해야 함을 알게 되었습니다. 데이터베이스 설계의 목적과 사용 시나리오를 명확히 이해하는 것이 핵심이라고 느꼈습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글