DBMS(데이터베이스 관리 시스템)에서 분해(Decomposition)란 하나의 테이블을 여러 개의 테이블로 나누는 과정으로, 데이터베이스에 존재하는 중복성(redundancy), 이상 현상(anomaly), 데이터 불일치(inconsistency) 문제를 제거하기 위해 사용됩니다.
분해는 크게 다음 두 가지 유형으로 구분할 수 있습니다.
- 무손실 분해(Lossless Decomposition)
- 손실 분해(Lossy Decomposition)
무손실 분해(Lossless Decomposition)란?
분해된 테이블들을 조인(Join)했을 때 원래의 관계 R을 완전하게 재구성할 수 있다면, 이를 무손실 분해라고 합니다. 이 방식은 정보가 전혀 손실되지 않으므로 항상 선호되는 방법입니다. 즉, 분해 후 다시 조인한 결과가 원래의 관계와 정확히 동일해야 합니다.
다음 예제를 통해 살펴보겠습니다.
<EmpInfo>
| 사원ID | 사원명 | 나이 | 지역 | 부서ID | 부서명 |
| E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
| E002 | Henry | 32 | Alabama | Dpt2 | HR |
| E003 | Tom | 22 | Texas | Dpt3 | Finance |
위 테이블을 아래와 같이 두 개의 테이블로 분해해 보겠습니다.
<EmpDetails>
| 사원ID | 사원명 | 나이 | 지역 |
| E001 | Jacob | 29 | Alabama |
| E002 | Henry | 32 | Alabama |
| E003 | Tom | 22 | Texas |
<DeptDetails>
| 부서ID | 사원ID | 부서명 |
| Dpt1 | E001 | Operations |
| Dpt2 | E002 | HR |
| Dpt3 | E003 | Finance |
이제 위 두 테이블에 자연 조인(Natural Join)을 적용해 보겠습니다. 공통 속성인 '사원ID'를 기준으로 조인하면 결과는 다음과 같습니다.
| 사원ID | 사원명 | 나이 | 지역 | 부서ID | 부서명 |
| E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
| E002 | Henry | 32 | Alabama | Dpt2 | HR |
| E003 | Tom | 22 | Texas | Dpt3 | Finance |
조인 결과가 원래의 <EmpInfo> 테이블과 완전히 동일합니다. 따라서 위 관계는 무손실 분해입니다. 즉, 어떠한 정보도 손실되지 않았습니다.
참고로, 두 테이블 R1과 R2의 분해가 무손실이 되려면 일반적으로 R1 ∩ R2(공통 속성)가 R1 또는 R2의 슈퍼키(superkey)여야 한다는 조건이 성립합니다.
손실 분해(Lossy Decomposition)란?
이름 그대로, 하나의 관계를 두 개 이상의 릴레이션 스키마로 분해한 뒤 원래의 관계를 다시 조회하려 할 때 정보 손실이 불가피한 경우를 말합니다. 잘못된 방식으로 분해하면 조인을 해도 원래의 데이터를 온전히 되찾을 수 없습니다.
다음 예제를 통해 살펴보겠습니다.
<EmpInfo>
| 사원ID | 사원명 | 나이 | 지역 | 부서ID | 부서명 |
| E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
| E002 | Henry | 32 | Alabama | Dpt2 | HR |
| E003 | Tom | 22 | Texas | Dpt3 | Finance |
위 테이블을 아래와 같이 두 개의 테이블로 분해해 보겠습니다.
<EmpDetails>
| 사원ID | 사원명 | 나이 | 지역 |
| E001 | Jacob | 29 | Alabama |
| E002 | Henry | 32 | Alabama |
| E003 | Tom | 22 | Texas |
<DeptDetails>
| 부서ID | 부서명 |
| Dpt1 | Operations |
| Dpt2 | HR |
| Dpt3 | Finance |
이번에는 두 테이블 간에 공통 속성이 없습니다. DeptDetails 관계에 사원ID가 포함되어 있지 않기 때문에 두 테이블을 조인하여 원래의 관계를 복원할 수 없습니다. 어떤 직원이 어느 부서에 소속되어 있는지 알 수 없게 됩니다.
따라서 위 관계는 손실 분해에 해당합니다.
정리
테이블을 분해할 때는 반드시 공통 속성(예: 사원ID)을 통해 조인이 가능하도록 설계해야 하며, 조인 결과가 원래의 관계와 동일하게 복원되는지 확인해야 합니다. 이것이 바로 무손실 분해와 손실 분해를 구분하는 핵심 기준입니다.