401. 제5정규형 (5NF)과 조인 종속 (Join Dependency)

⚠️ 이 문서는 정규화의 마지막 관문으로, 테이블을 2개로 쪼갰을 때는 원래 데이터가 복원되지 않다가 **반드시 3개 이상으로 쪼개고 조인(JOIN)해야만 원래 데이터가 완벽하게 복원되는 기이한 다자간 종속 관계인 '조인 종속'을 찾아내어 분리하는 제5정규형(5NF)**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 제5정규형은 "테이블을 무조건 여러 개로 쪼개는 게 능사가 아니다. 쪼갰으면 나중에 다시 합쳤을 때(JOIN) 처음과 100% 똑같은 데이터가 나와야 한다(무손실 분해)"는 원칙을 지키는 것이다.
  2. 조인 종속: 어떤 릴레이션을 2개로 쪼개면 가짜 데이터(Spurious Tuple)가 생겨서 복원이 안 되는데, 3개로 쪼개고 조인하면 완벽하게 복원되는 특수한 종속성을 말한다.
  3. 해결책: 이런 조인 종속성이 발견되면, 억지로 2개가 아니라 반드시 3개 이상의 테이블로 분할해야 제5정규형(5NF, PJ/NF)을 만족하게 된다.

Ⅰ. 개요: 쪼갰다가 합쳤는데 왜 데이터가 늘어났지? (Context & Necessity)

우리가 정규화를 한답시고 테이블을 잘게 쪼갰다. 나중에 화면에 데이터를 뿌려주려고 쪼개놓은 두 테이블을 다시 JOIN 했다.

  • 원래 데이터: 3줄
  • 조인한 결과: 4줄? (없는 데이터 1줄이 생겨남)

이 가짜 데이터를 **스퓨리어스 튜플(Spurious Tuple)**이라고 부른다. 잘못 쪼갠 것이다. 이렇게 원래 데이터로 돌아오지 못하는 쪼개기를 **'손실 분해'**라고 한다. 정규화는 반드시 원래대로 완벽하게 돌아오는 **'무손실 분해(Non-loss Decomposition)'**여야만 한다.

📢 섹션 요약 비유: 5NF 위반은 **'잘못 자른 퍼즐'**과 같습니다. 그림을 2조각으로 잘랐다가 다시 붙이려니까 아귀가 안 맞아서 억지로 붙였더니 원래 없던 그림이 생겨버린 겁니다. 알고 보니 이 퍼즐은 처음부터 3조각으로 잘라야만 나중에 완벽하게 다시 맞춰지는 특수한 퍼즐(조인 종속)이었던 것이죠.


Ⅱ. 조인 종속 (Join Dependency) 이란? ★

  • [의사, 환자, 질병] 이라는 3개의 컬럼으로 이루어진 테이블이 있다.
  • "김의사가 박환자에게 감기약을 처방했다"라는 뜻이다.

이 테이블을 2개로 쪼개보자.

  1. [의사, 환자] 테이블
  2. [환자, 질병] 테이블

나중에 이 두 개를 환자를 기준으로 JOIN 하면 어떻게 될까?

  • 김의사가 박환자를 진찰했고, 박환자가 감기에 걸렸다는 사실을 합치면 $\rightarrow$ "김의사가 박환자의 감기를 진찰했다!" (그럴듯해 보이지만 거짓일 수 있다. 박환자는 감기 말고 배탈도 걸렸는데, 배탈은 이의사에게 진찰받았을 수도 있기 때문이다.)

이처럼 2개로 쪼개면 가짜 데이터가 생기지만, 3개([의사-환자], [환자-질병], [질병-의사])로 쪼개서 3개를 한꺼번에 JOIN 했을 때 완벽하게 원래 데이터로 돌아오는 특이한 상태조인 종속이라고 부른다.


Ⅲ. 5NF 달성 방법: 3개로 찢어라

해결책은 간단하다. 조인 종속이 발견되면, 억지로 2개로 찢지 말고 프로젝트, 공급자, 부품처럼 삼각관계로 얽힌 테이블 3개로 완벽하게 쪼개어(분해) 저장하면 된다.

이것을 투영-조인 정규형(PJ/NF: Projection-Join Normal Form)이라고도 부른다.

┌──────────────────────────────────────────────────────────────┐
│           조인 종속(Join Dependency)과 5NF 분리 과정 시각화              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ [ ❌ 5NF 위반 (삼각관계가 한 테이블에 있음) ]                         │
│  테이블: [ 의사 | 환자 | 질병 ]                                  │
│                                                              │
│        ▼ (잘못된 2분할 ──▶ 나중에 JOIN 시 가짜 데이터 발생!)           │
│                                                              │
│ [ 🟢 5NF 달성 (3분할로 쪼갬) ]                                   │
│  테이블 A: [ 의사 | 환자 ]                                       │
│  테이블 B: [ 환자 | 질병 ]                                       │
│  테이블 C: [ 질병 | 의사 ]                                       │
│                                                              │
│ ★ 특징: 이 3개의 테이블을 동시에 JOIN 하면 원래 테이블과 100% 똑같아진다. │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"실무에서 5NF를 만날 확률은 낙뢰를 맞을 확률보다 낮다." 제5정규형은 학술적인 '정규화 이론의 끝판왕'일 뿐, 실무 데이터베이스 설계에서는 거의 쓰이지 않는다. 3개의 복합키가 완벽한 대칭적 삼각관계를 이루는(조인 종속) 비즈니스 로직 자체가 현실에서 거의 발생하지 않기 때문이다. 하지만 정보처리 기사나 전공 시험에서는 정규화의 단계를 묻는 문제로 "조인 종속성 이용 = 5NF"라는 키워드 매칭이 무조건 출제되므로 반드시 암기하고 넘어가야 한다.


📌 관련 개념 맵

  • 선행 조건: 제4정규형 (4NF - 다치 종속 제거, 400번 문서)
  • 핵심 키워드: 무손실 분해 (Non-loss Decomposition), 스퓨리어스 튜플 (Spurious Tuple - 가짜 데이터)
  • 동의어: PJ/NF (Projection-Join Normal Form)
  • 정규화 암기 팁: 도(1) 부(2) 이(3) 결(B) 다(4) 조(5)

👶 어린이를 위한 3줄 비유 설명

  1. 피자를 반으로 잘랐다가 다시 붙이려니까 모양이 안 맞아서 괴물 피자가 되어버렸어요! (가짜 데이터 발생)
  2. 알고 보니 이 피자는 무조건 '3조각'으로 잘라야만 나중에 다시 동그랗게 완벽히 합쳐지는 마법의 피자(조인 종속)였던 거예요.
  3. 그래서 피자를 3조각(3개의 테이블)으로 나눠서 냉장고에 보관하는 규칙을 5NF라고 부른답니다!