💡 핵심 인사이트
데이터베이스 정규화를 위해 거대한 테이블을 두 개로 쪼갤 때 반드시 지켜야 하는 철칙입니다.
쪼개진 두 테이블을 나중에 다시 연결(Join)했을 때, 데이터가 유실되거나 반대로 듣도 보도 못한 가짜 데이터(Spurious Tuples)가 섞여 나오지 않고, '분해하기 전의 원본 테이블과 100% 토씨 하나 안 틀리고 똑같이 완벽하게 복원됨'을 보장하는 수학적 분해 방식입니다.


Ⅰ. 손실 분해의 끔찍한 재앙 (가짜 데이터의 침투)

"무손실"이라는 단어 때문에 "아~ 데이터를 잃어버리지 않는구나?"라고 착각하기 쉽습니다. 사실 잘못 쪼개면 데이터가 없어지는 게 아니라, **조인(Join) 시 오히려 쓰레기 데이터(가짜 행)가 기하급수적으로 부풀어 올라 원본이 박살 나는 현상(Loss of Information)**이 발생합니다. 이것이 손실 분해입니다.

[잘못된 쪼개기 시나리오]

  • 원본 (사번, 이름, 프로젝트명) ➔ (1, 김철수, A프로젝트), (2, 김철수, B프로젝트)
  • 멍청한 설계자가 이걸 (사번, 이름) 테이블과 (이름, 프로젝트명) 테이블로 쪼갰습니다.
  • 재앙: 나중에 다시 합치려고 '김철수'라는 이름(공통 속성)을 기준으로 조인을 돌리면? DB는 "1번 김철수가 B프로젝트를 했나? 2번 김철수가 A를 했나?"를 헷갈려 하며, (1, 김철수, B프로젝트)라는 원본에 없던 거짓 정보(유령 데이터)를 곱하기(Cartesian Product)로 뻥튀기해서 토해냅니다.
  • 정보의 본질이 심각하게 손상(Loss)된 것입니다.

Ⅱ. 무손실 분해를 보장하는 마법의 조건

테이블을 찢을 때 위와 같은 참사를 막고 완벽한 찰흙 조립(무손실 분해)이 되려면, 쪼개진 두 테이블의 겹치는 '공통 속성'이 반드시 둘 중 최소 한 테이블에서 '절대 권력(기본 키/후보 키)'을 쥐고 있어야 합니다.

[올바른 쪼개기 (무손실 분해)]

  1. 뚱뚱한 원본 릴레이션 $R$을 $R_1$과 $R_2$로 쪼갭니다.
  2. 두 테이블을 이어줄 본드 역할을 할 교집합 속성(공통 컬럼)인 $R_1 \cap R_2$ 가 존재합니다.
  3. 핵심 공식: 이 교집합 속성이 반드시 $R_1$의 기본 키(결정자)이거나, 혹은 $R_2$의 기본 키(결정자)로 작용하여 유일성을 띄어야만 합니다.

(앞선 예시에서 '이름'은 동명이인이 존재하므로 PK가 될 수 없습니다. 그래서 이름으로 쪼개면 조인 시 뻥튀기가 일어났던 것입니다. 대신 유일한 '사번'을 교집합(외래 키)으로 두어 쪼개면 100% 무손실 복원이 가능해집니다.)


Ⅲ. 종속성 보존 (Dependency Preservation)과의 관계

정규화를 할 때 테이블을 너무 잘게 찢다 보면, "학번이 학과를 결정한다" 같은 기존의 중요한 함수적 종속성(FD) 룰이 쪼개진 파편 속으로 공중분해 되어 사라져 버리는 현상이 생길 수 있습니다.

  • 완벽한 정규화 설계란, 조인했을 때 원본이 100% 복원되는 '무손실 분해' 조건을 최우선으로 만족하면서 동시에 찢어진 테이블들 안에서도 기존의 룰이 살아있는 **'종속성 보존'**까지 모두 달성하는 것을 의미합니다.

📢 섹션 요약 비유: 무손실 분해는 거대한 종이 지도를 보관하기 위해 **'반으로 찢는 예술적인 방법'**입니다. 지도를 무작정 일직선으로 찢어버리면(손실 분해), 나중에 테이프로 붙일 때 산과 강의 위치가 미세하게 어긋나서 완전히 엉뚱한 가짜 지도가 됩니다. 하지만 찢어지는 경계선 양쪽에 똑같이 정밀한 **'위도/경도 십자선 마커(기본 키)'**를 펀치로 뚫어놓고(무손실 분해) 자르면, 나중에 그 구멍만 맞춰서 붙이면 1mm의 오차도 없이 원본 지도가 100% 완벽하게 부활합니다.