5NF와 데이터베이스 설계

5NF and Database Design

요약

데이터베이스 정규화 이론에서 5정규형(5NF)이 복잡하게 설명되는 문제를 분석하고, 실제 비즈니스 요구사항에서 출발하는 논리적 설계 접근 방식을 제시한다. 논문은 기존 교과서의 예제들의 문제점을 지적하고 더 직관적인 설계 전략을 제안한다.

핵심 포인트

  • 5NF는 종종 인위적으로 복잡하게 설명되며, 비즈니스 로직이 이상한 기존 사례들의 문제를 분석
  • 비즈니스 요구사항 → 논리 모델 → 물리 스키마 설계의 순차적 접근으로 자연스럽게 정규화 달성 가능
  • 5NF 이론 자체보다는 체계적인 테이블 설계 전략이 실무에서 더 유용함을 주장

왜 중요한가

복잡한 데이터베이스 설계 문제를 이론보다는 실전적 관점에서 접근할 수 있다.

📄 전문 번역

다섯 번째 정규형(5NF)을 제대로 이해해보자

데이터베이스 기초 개념을 설명하는 전통적인 방식들을 다시 생각해볼 필요가 있습니다. 이전 글에서 네 번째 정규형(4NF)에 대해 살펴봤는데요, "역사적으로 4NF 설명들은 불필요하게 복잡하다"는 결론에 도달했습니다.

이번엔 가장 어려운 주제인 다섯 번째 정규형(5NF)을 다루겠습니다. 4NF보다도 더 헷갈리게 설명되는 경향이 있는데, 사실 이런 혼란은 완전히 인위적이라는 걸 보여드리려 합니다.

이 글의 핵심 구성

우선 다양한 자료에서 사용하는 5NF 예제들을 살펴봅니다. 좋은 예제가 5NF 이해의 시작이거든요.

위키피디아는 보통 개념 설명의 좋은 기준점이 되지만, 5NF의 경우는 그렇지 않습니다. 위키피디아 예제의 문제점들을 짚어봅시다.

테이블 설계의 논리적인 순서를 따져봅니다. ①비즈니스 요구사항에서 시작 ②논리 모델 작성 ③물리 테이블 스키마 설계 이 순서대로요.

"아이스크림" 예제를 통해 자연스럽게 나타나는 AB-BC-AC 삼각형 패턴을 설명합니다.

"뮤지션" 예제로 ABC+D 별 패턴을 다룹니다. 특정 비즈니스 요구사항에 따라 복합 키와 합성 키 중 선택할 수 있다는 점도 논의합니다.

마지막으로 결론에 도달합니다. 테이블 스키마 설계할 때 꼭 5NF를 고민할 필요는 없다는 겁니다. 논리 모델에서 시작해서 정규화를 유지하는 표준적인 테이블 설계 전략을 적용하면 되니까요.

마지막 두 장에서는 각 예제를 확장해서 추가 학습 포인트를 설명합니다.


현재 교육 자료들에서 사용하는 예제들

먼저 일반적으로 쓰이는 5NF 예제들을 정리해봅시다.

위키피디아: 영업사원 / 브랜드 / 제품 유형

  • 영업사원이 제품 유형을 판매함 (예: "청소기")
  • 영업사원이 브랜드를 판매함 (예: "필립스")
  • 브랜드가 제품 유형을 제공함

Decomplexify: 아이스크림 브랜드 / 맛 / 친구들

  • 브랜드가 맛을 제공함 (예: Frosty's는 바닐라, 초콜릿, 딸기, 민트 판매)
  • 친구들이 맛을 좋아함 (예: Jason은 바닐라와 초콜릿을 좋아함)
  • 친구들이 브랜드를 좋아함 (예: Jason은 Frosty's와 Alpine을 좋아함)

Data Demythed 블로그(Barry Johnson): 콘서트 / 뮤지션 / 악기 / 공연

  • 뮤지션이 콘서트에 참여함
  • 뮤지션이 악기를 연주할 수 있음
  • 뮤지션이 특정 콘서트에서 악기를 연주함

Barry의 글은 5NF가 전통적으로 얼마나 잘못 설명되어왔는지를 잘 지적합니다. 당시 댓글에서 Barry와 나눈 논의가 제 이해도 한 단계 높였는데요, 여기서는 제가 다루는 이 비즈니스 케이스를 중점적으로 설명하겠습니다. 구조적으로 앞의 두 예제와는 다른 특징이 있거든요.


위키피디아 예제, 제대로 읽어보기

위키피디아는 예제를 좀 복잡하게 설명합니다. 먼저 3개 열을 가진 테이블("영업사원", "브랜드", "제품 유형")을 보여줍니다.

이 테이블이 뭘 의미하는 걸까요? 일단 나중에 따져봅시다.

그 다음 이런 설명이 나옵니다.

> "영업사원, 브랜드, 제품 유형의 유효한 조합을 제한하는 규칙이 없다면, 상황을 올바르게 모델링하려면 위의 3개 속성 테이블이 필요합니다.

>

> 그런데 다음의 규칙을 적용한다고 해봅시다. 영업사원은 일정한 브랜드와 제품 유형을 판매합니다. 브랜드 B1과 B2가 그들의 판매 목록에 있고, 제품 P가 판매 목록에 있다면, (B1과 B2 모두 제품 P를 만든다고 가정할 때) 영업사원은 두 브랜드 모두에서 제품 P를 판매해야 합니다. 즉, B1의 제품 P만 판매하거나 B2의 제품 P만 판매할 수 없습니다.

>

> 그러면 테이블을 세 개로 나눌 수 있습니다."

"판매하지 않을 수 없다"는 표현과 "두 브랜드 모두에서 제품을 판매해야 한다"는 규칙은 정말 이상합니다. 현실에서 이런 일이 있을까요?

테이블은 잠시 접어두고, 이 규칙 자체가 이상하다는 점을 생각해봅시다. 정상적인 경우를 다루지 못한다는 뜻이거든요. 만약 제가 Robusto 청소기를 팔기 시작하려면, 반드시 Acme 청소기도 팔아야 합니다. Acme 빵통을 팔기 시작하려면, 반드시 Acme 청소기도 팔아야 한다는 거네요.

이건 비즈니스 관점에서 말이 안 되니까, 이 예제로는 5NF를 제대로 이해할 수 없습니다. 지금은 이 꼬아놓은 설명이 교육학적으로 뭘 노린 건지 어느 정도 이해하지만, 여전히 실패하고 있다고 생각합니다. 5NF 이해에 도움이 안 되거든요.