[DB] 데이터베이스 정규화란?

이룸·2026년 4월 5일

위클리페이퍼

목록 보기
14/15

데이터베이스 정규화(Normalization)는 관계형 데이터베이스에서 데이터의 중복을 최소화하고 무결성을 유지하기 위해 데이터를 구조화하는 과정이다. 쉽게 말해, 뚱뚱하고 복잡한 하나의 테이블을 더 작고 논리적인 여러 개의 테이블로 나누고, 이들을 관계로 연결하는 작업이다.

1. 정규화를 하는 이유

정규화를 하지 않아 데이터가 한 곳에 불필요하게 중복되어 있으면, 데이터를 조작할 때 다음과 같은 이상 현상(Anomaly)이 발생하기 때문이다.

  • 삽입 이상 (Insertion Anomaly): 새로운 데이터를 삽입하기 위해 불필요한 데이터까지 억지로 껴넣어야 하는 현상이다.
  • 갱신 이상 (Update Anomaly): 중복된 데이터 중 일부만 변경되어, 데이터 간의 일관성이 깨지고 모순이 발생하는 현상이다.
  • 삭제 이상 (Deletion Anomaly): 특정 데이터를 삭제할 때, 의도하지 않은 다른 유용한 정보까지 함께 삭제되어 버리는 현상이다.

정규화는 이러한 이상 현상들을 방지하고, 데이터베이스의 구조를 안정적으로 유지하는 역할을 한다.


2. 정규화의 주요 단계 (정규형, Normal Form)

정규화는 규칙을 적용하는 수준에 따라 여러 단계로 나뉜다. 실무에서는 보통 제3정규형이나 BCNF까지만 진행하는 경우가 많다.

제1정규형 (1NF)

  • 규칙: 테이블의 컬럼이 단 하나의 값(원자값)만 가져야 한다.
  • 설명: 한 칸에 여러 개의 데이터(예: 전화번호 2개, 취미 여러 개 등)가 쉼표 등으로 묶여 들어가는 것을 허용하지 않고, 이를 분리하여 각각의 행이나 새로운 테이블로 나눈다.

제2정규형 (2NF)

  • 규칙: 1NF를 만족하면서, 부분 함수 종속성을 제거해야 한다.
  • 설명: 테이블의 기본키(Primary Key)가 여러 컬럼으로 이루어진 복합키일 때 발생한다. 기본키의 일부에만 종속된(영향을 받는) 일반 컬럼이 있다면, 이를 별도의 테이블로 분리한다. 즉, 기본키가 아닌 모든 컬럼은 전체 기본키에 완전히 의존해야 한다.

제3정규형 (3NF)

  • 규칙: 2NF를 만족하면서, 이행적 함수 종속성을 제거해야 한다.
  • 설명: 기본키가 아닌 일반 컬럼들 사이에서 종속 관계가 발생하는 것을 막는다. 예를 들어 A -> B이고 B -> C인 관계가 있다면, 결국 A -> C가 성립해버린다. 이처럼 일반 컬럼(B)이 다른 일반 컬럼(C)을 결정짓는 구조라면 이들을 떼어내어 새로운 테이블로 만든다.

보이스-코드 정규형 (BCNF)

  • 규칙: 3NF를 만족하면서, 모든 결정자가 후보키여야 한다.
  • 설명: 3NF보다 조금 더 엄격한 규칙이다. 일반 컬럼이 기본키의 일부를 결정하는(영향을 미치는) 예외적인 상황을 찾아내어 분리하는 과정이다.

💡 주의할 점: 반정규화(Denormalization)

정규화가 무조건 좋은 것만은 아니다. 정규화를 엄격하게 진행할수록 테이블이 잘게 쪼개지기 때문에, 사용자가 원하는 데이터를 한 번에 보기 위해서는 여러 테이블을 연결하는 조인(Join) 연산이 많이 필요해진다. 이는 데이터베이스의 조회 성능 저하로 이어질 수 있다.

따라서 데이터의 일관성보다 읽기 속도와 성능이 훨씬 중요한 상황에서는, 의도적으로 정규화의 원칙을 깨고 테이블을 합치거나 중복 데이터를 허용하는 반정규화(역정규화)를 수행하기도 한다.

profile
내 꿈은 풀스택 개발자

0개의 댓글