5차 정규화와 조인 종속성으로 보는 관계 분해

5차 정규화(5NF)의 조인 종속성, 비손실 분해 원리와 프로그래머·자격증·언어 관계를 통한 데이터베이스 설계 기준을 정리한다.

2026-08-14 · 최초 발행 2025-08-10

조인 결과가 원래 사실과 같아야 한다

5차 정규화(Fifth Normal Form, 5NF)는 조인 종속성(Join Dependency)을 다루는 정규화 단계다. 릴레이션 R에 있는 모든 조인 종속성이 R의 후보키를 통해서만 만족될 때 해당 릴레이션은 5차 정규형에 있다.

프로젝션-조인 정규형(Project-Join Normal Form, PJNF)이라는 이름도 사용한다. 4차 정규화보다 일반화된 형태이며, 4차 정규화는 5차 정규화의 특수한 경우에 해당한다.

조인 종속성은 하나의 릴레이션을 여러 프로젝션(Projection)으로 나눈 뒤 다시 조인했을 때 원래 릴레이션과 같은 결과를 얻을 수 있는 성질이다. 이 관계를 제대로 분리하지 않으면 데이터가 중복되고, 갱신 이상(Update Anomaly)이 생기며, 제어되지 않은 조인이 잘못된 정보를 추론할 수 있다.

분해가 필요한 관계의 조건

5차 정규화는 기본키에서 조인 종속성이 발생하고, 독립된 속성 사이에 조인 연관성이 있을 때 검토한다. 부분적인 조인 종속성은 있지만 전체 조인 종속성은 없는 관계가 하나의 테이블에 묶여 있는 경우가 대상이다.

속성 A, B, C를 예로 들면 A-B, B-C, A-C 사이에는 각각 연관관계가 존재할 수 있다. 반면 A-B-C 전체에 대한 연관관계는 없을 수 있다. 이런 상태에서 세 속성을 하나의 테이블로 관리하면 실제 관계보다 더 많은 의미가 행에 담길 수 있다.

이 분해가 지향하는 바는 다음과 같다.

  • 원래 릴레이션의 정보를 잃지 않는 비손실 분해(Lossless Decomposition)
  • 불필요한 중복에서 발생하는 갱신 이상의 제거
  • 잘못된 조인으로 생기는 허위 정보의 방지
  • 중복 감소에 따른 저장 공간 효율 향상

프로그래머·자격증·언어를 한 테이블에 둘 때

프로그래머의 보유 자격증과 사용 가능 언어를 한 테이블에 저장하면, 자격증과 언어 조합마다 행이 만들어진다.

프로그래머 자격증 프로그래밍 언어
김개발 정보처리기사 Java
김개발 정보처리기사 Python
김개발 AWS 자격증 Java
김개발 AWS 자격증 Python
이코더 정보처리기사 C++
이코더 CCNA C++
박프로 정보처리기사 Java
박프로 정보처리기사 C#

이 구조에서는 한 프로그래머가 여러 자격증과 언어를 가질수록 조합별 행이 반복된다. 예를 들어 김개발의 이름이 바뀌면 여러 행을 함께 수정해야 한다. 또한 특정 자격증과 특정 언어가 필연적으로 연결된 것처럼 보일 수 있다.

이를 관계별로 분해하면 각 릴레이션이 담당하는 사실을 분명히 할 수 있다.

프로그래머-자격증 릴레이션:

프로그래머 자격증
김개발 정보처리기사
김개발 AWS 자격증
이코더 정보처리기사
이코더 CCNA
박프로 정보처리기사

프로그래머-언어 릴레이션:

프로그래머 프로그래밍 언어
김개발 Java
김개발 Python
이코더 C++
박프로 Java
박프로 C#

자격증과 언어 사이에 직접 관계가 있다면 자격증-언어 릴레이션도 분리한다.

자격증 프로그래밍 언어
정보처리기사 Java
정보처리기사 Python
정보처리기사 C++
정보처리기사 C#
AWS 자격증 Java
AWS 자격증 Python
CCNA C++

이렇게 나누면 중복이 줄고 각 릴레이션은 하나의 관계에 집중한다. 갱신 이상과 잘못된 추론의 가능성도 낮아진다.

비정규화 테이블프로그래머-자격증-언어프로그래머-자격증릴레이션프로그래머-언어릴레이션자격증-언어릴레이션5차 정규화릴레이션

중복 감소와 조인 비용 사이의 선택

5차 정규화는 데이터 중복을 최소화하고 일관성을 높이며, 복잡한 조인 종속성을 제거하는 데 유리하다. 갱신 이상을 줄이고 저장 공간의 효율도 높일 수 있다.

반대로 테이블 수가 늘어나 데이터베이스 구조가 복잡해질 수 있다. 조인 연산이 많아지면 성능이 저하될 가능성이 있고, 조인 종속성을 식별하는 설계와 구현도 쉽지 않다.

그래서 실무에서 5차 정규화를 완전하게 적용하는 경우는 드물다. 조인 종속성을 정확히 분석하기 어렵고, 과도한 정규화가 조인 연산 증가로 이어질 수 있기 때문이다. 비즈니스 요구에 따라 의도적인 데이터 중복이 필요한 경우도 있다. 대부분의 경우 3차 정규화까지만 적용해도 충분한 효과를 얻는다.

다만 다대다 관계가 복잡하게 얽혀 있거나, 금융·의료처럼 데이터 일관성이 매우 중요한 시스템, 중복 데이터 최소화가 필요한 대용량 데이터, 데이터 웨어하우스나 분석 시스템을 설계할 때는 5차 정규화를 검토할 수 있다.

정규화된 구조의 성능을 다루는 방법

현대 DBMS는 정규화된 구조에서 늘어날 수 있는 조인 비용을 완화하는 여러 기법을 제공한다.

  • 적절한 인덱스 설계로 조인 성능을 높이는 인덱싱
  • 자주 사용하는 조인을 뷰(View)로 정의하는 방식
  • 복잡한 조인을 효율적으로 처리하는 쿼리 최적화기
  • 관련 데이터를 물리적으로 가깝게 저장하는 물리적 저장 최적화
  • 자주 사용하는 조인 결과를 보관하는 캐싱
5차 정규화 설계성능 문제 발생 가능최적화 방법인덱싱 생성쿼리 최적화물리적 저장 최적화캐싱성능 개선

5차 정규화는 복잡한 관계를 모델링할 때 데이터 중복과 일관성 문제를 바라보는 기준이 된다. 적용 수준은 데이터 일관성 요구사항, 시스템 성능, 유지보수 용이성, 비즈니스 요구사항, 개발 리소스와 일정을 함께 고려해 결정한다.

5차 정규화조인 종속성데이터베이스 설계관계형 데이터베이스비손실 분해