나만의 학습 기록

최종 목적은 기술 블로그💩

백엔드 공부

더 깊은 데이터베이스 지식 (4) - 데이터베이스 정규화

밈밍민믹 2026. 4. 17. 16:03

안녕하세요. 이번주내내 날씨가 엄청 더웠는데, 오늘은 흐리고 조금 춥네요. 자고 일어나니 목이 조금 칼칼하고 흐리더라고요.

얼른 날씨가 좋아지면 좋겠습니다. 개인적으로 추운것보단 더운게 훨씬 좋아서 여름이 더욱 기다려지네요.

저번 시간에는 ORM의 JPA에서 발생할 수 있는 성능 문제인 N+1문제에 대해서 학습해봤습니다. 이번 시간에는 성능 문제를 잠시 넘어, 데이터 중복을 줄이고 데이터의 일관성을 유지하기 위한 데이터베이스 정규화에 대해서 학습해보겠습니다.


데이터베이스 정규화

데이터 중복을 최소화하고, 구조를 체계화하여 데이터 무결성을 높이고 이상 현상을 방지하는 과정

 

그렇다면 여기서 말하는 이상현상이란 무엇을 말하는걸까요?

정규화가 필요한 이유 : 이상현상

이상현상

  • 불필요한 데이터의 중복으로 인해 발생하는 부작용들
  • 함수 종속 관계 여러 개를 하나의 릴레이션으로 표현하는 경우에 주로 발생한다.

 

이상현상의 종류

예시 테이블

 

1. 삽입 이상

새로운 데이터를 추가할 때 불필요한 다른 데이터가 함께 필요해서 원하는 데이터만 삽입하지 못하는 문제입니다.

 

예를 들어 새 강의(C103, '알고리즘', P03, '박교수')를 개설하려는데, 아직 수강 신청한 학생이 없다고 가정할 경우 아래와 같이 학생 정보가 없어서 강의 정보를 삽입할 수 없는 문제가 발생합니다.

 

2. 갱신 이상

중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 문제입니다.

 

예시 테이블에서 C101 데이터베이스 강의의 담당 교수 이름이 "이교수" → "이승훈 교수"으로 변경되었다고 가정할 경우

같은 교수 ID(P01)를 가지는데 교수명이 서로 다르게 저장되어 데이터 불일치 문제가 발생합니다.

 

3. 삭제 이상

하나의 데이터를 삭제할 때 원하지 않는 다른 정보까지 함께 삭제되는 문제입니다.

 

예를 들어 최민수(1003) 학생이 운영체제(C102) 수강을 취소했을 경우

원래 지우고 싶던 "최민수 학생의 수강 정보" 뿐만 아니라 "운영체제 강의가 존재한다는 사실"까지 사라지게 됩니다.

 

이처럼 하나의 테이블에 여러 정보를 함께 저장하면 삽입 이상, 갱신 이상, 삭제 이상과 같은 문제가 발생할 수 있습니다. 이러한 이상현상을 방지하고 데이터 중복을 최소화하기 위해 데이터베이스 정규화를 수행합니다.

 

정규화의 특징

  1. 데이터 중복 최소화
    • 동일한 데이터가 여러 곳에 저장되는 것을 방지하여 저장 공간을 효율적으로 사용합니다.
  2. 데이터 무결성 유지
    • 데이터 변경 시 일곤성을 유지하여 오류를 방지합니다.
  3. 단계적 분해
    • 1NF, 2NF, 3NF, BCNF 등 단계별 규칙에 따라 테이블을 나눕니다.
  4. 이상 현상 방지
    • 삽입, 갱신, 삭제 시 발생할 수 있는 불일치 문제를 해결합니다.

 

정규화의 장단점

장점

  • 데이터 불일치 위험이 낮아져 데이터 신뢰성이 높아집니다.
  • 테이블 구조가 명확하여 수정 및 혹장 시 다른 데이터에 미치는 영향이 적습니다.
  • 반복되는 데이터를 분리하여 전체 DB 용량이 줄어듭니다.

단점

  • 테이블이 분리되어 있어 관련 데이터를 JOIN 연산이 많아져 쿼리 속도가 느려질 수 있습니다.
  • 데이터 조회를 위해 여러 테이블을 참조해야 하므로 쿼리가 길고 복잡해집니다.
  • 너무 많은 테이블 분해(4NF, 5NF 등)는 관리 비용을 증가시킬 수 있습니다.

 

정규화는 하나의 개념으로 끝나는 것이 아닌 기준에 따라 여러 단계로 나뉘어 있습니다. 이러한 정규화의 종류를 알아보기에 앞서 먼저 정규화에서 자주 등장하는 함수 종속성에 대해 살펴보겠습니다.

 

함수 종속성

테이블의 속성 X, Y에 대해 X의 값을 알면 Y의 값이 유일하게 결정되는 관계

(X → Y, X: 결정자, Y: 종속자)

1. 완전 함수 종속

어떤 속성이 기본키 전체에 완전히 종속되어 기본키 전부가 있어야 값을 알 수 있는 관계

{학번, 과목} →성적

즉, 학번과 과목이 모두 있어야 성적을 알 수 있다.

 

2. 부분 함수 종속

어떤 속성이 복합 기본키 전체가 아니라 그 중 일부에만 종속되는 관계

{학번, 과목} → 학년, 학번만으로 학년이 결정

즉, 복합키의 일부인 학번만으로 학년이 결정된다.

 

3. 이행 함수 종속

기본키가 다른 속성을 결정하고, 해당 속성이 다시 또 다른 속성을 결정하는 관계

A → B, B → C 일 때 A → C가 성립되는 관계

즉, 학번이 학과를 결정하고, 학과가 다시 학과사무실을 결정하여 학번이 학과 사무실을 결정한.

 

정규화의 종류

1. 제 1 정규형(1NF)

테이블의 모든 속성(컬럼)이 원자값만을 가지도록 분해한다.

각 컬럼에는 하나의 값만 저장되도록 분리한다.

 

2. 제 2 정규형(2NF)

1NF를 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되도록 부분 함수 종속을 제거한다.

복합키의 일부에만 종속된 속성을 분리하여 부분 함수 종속을 제거한다.

 

3. 제 3 정규형(3NF)

2NF를 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 한다.

기본키가 아닌 속성 간의 종속 관계를 제거하여 이행 함수 종속을 없앤다.

 

4. BCNF

3NF를 만족하고, 모든 결정자가 후보키가 되도록 한다.

모든 결정자가 후보키가 되도록 분해하여 이상을 방지한다.

 

5. 제 4 정규형(4NF)

BCNF를 만족하고, 다치 종속성을 제거한다.

서로 독립적인 다중값 속성을 분리하여 다치 종속을 제거한다.

6. 제 5 정규형(5NF)

4NF를 만족하고, 조인 종속성을 제거하여 후보키로만 종속되도록 한다.

분해된 릴레이션을 다시 조인할 때 불필요한 튜플이 생성되지 않도록 조인 종속을 제거한다.

 

일반적으로 데이터베이스 정규화는 제 1정규형부터 제 5정규형까지 구분되지만, 실무나 학습 단계에서는 보통 BCNF 정도까지 이해하는 경우가 많습니다.


이상으로 오늘은 데이터베이스 정규화까지 학습해보았습니다. 이제 다음편을 마지막으로 더 깊은 데이터베이스 지식은 끝마칠 예정입니다. 다음 시간에는 인덱스와 그 작동원리에 대해서 학습해보도록 합시다. 수고하셨습니다.