Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

DBMS 무손실 분해 vs 손실 분해, 차이점과 예제로 쉽게 이해하기

DBMS(데이터베이스 관리 시스템)에서 분해(Decomposition)란 하나의 테이블을 여러 개의 테이블로 나누는 과정으로, 데이터베이스에 존재하는 중복성(redundancy), 이상 현상(anomaly), 데이터 불일치(inconsistency) 문제를 제거하기 위해 사용됩니다.

분해는 크게 다음 두 가지 유형으로 구분할 수 있습니다.

  • 무손실 분해(Lossless Decomposition)
  • 손실 분해(Lossy Decomposition)

무손실 분해(Lossless Decomposition)란?

분해된 테이블들을 조인(Join)했을 때 원래의 관계 R을 완전하게 재구성할 수 있다면, 이를 무손실 분해라고 합니다. 이 방식은 정보가 전혀 손실되지 않으므로 항상 선호되는 방법입니다. 즉, 분해 후 다시 조인한 결과가 원래의 관계와 정확히 동일해야 합니다.

다음 예제를 통해 살펴보겠습니다.

<EmpInfo>

사원ID사원명나이지역부서ID부서명
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

위 테이블을 아래와 같이 두 개의 테이블로 분해해 보겠습니다.

<EmpDetails>

사원ID사원명나이지역
E001Jacob29Alabama
E002Henry32Alabama
E003Tom22Texas

<DeptDetails>

부서ID사원ID부서명
Dpt1E001Operations
Dpt2E002HR
Dpt3E003Finance

이제 위 두 테이블에 자연 조인(Natural Join)을 적용해 보겠습니다. 공통 속성인 '사원ID'를 기준으로 조인하면 결과는 다음과 같습니다.

사원ID사원명나이지역부서ID부서명
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

조인 결과가 원래의 <EmpInfo> 테이블과 완전히 동일합니다. 따라서 위 관계는 무손실 분해입니다. 즉, 어떠한 정보도 손실되지 않았습니다.

참고로, 두 테이블 R1과 R2의 분해가 무손실이 되려면 일반적으로 R1 ∩ R2(공통 속성)가 R1 또는 R2의 슈퍼키(superkey)여야 한다는 조건이 성립합니다.

손실 분해(Lossy Decomposition)란?

이름 그대로, 하나의 관계를 두 개 이상의 릴레이션 스키마로 분해한 뒤 원래의 관계를 다시 조회하려 할 때 정보 손실이 불가피한 경우를 말합니다. 잘못된 방식으로 분해하면 조인을 해도 원래의 데이터를 온전히 되찾을 수 없습니다.

다음 예제를 통해 살펴보겠습니다.

<EmpInfo>

사원ID사원명나이지역부서ID부서명
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

위 테이블을 아래와 같이 두 개의 테이블로 분해해 보겠습니다.

<EmpDetails>

사원ID사원명나이지역
E001Jacob29Alabama
E002Henry32Alabama
E003Tom22Texas

<DeptDetails>

부서ID부서명
Dpt1Operations
Dpt2HR
Dpt3Finance

이번에는 두 테이블 간에 공통 속성이 없습니다. DeptDetails 관계에 사원ID가 포함되어 있지 않기 때문에 두 테이블을 조인하여 원래의 관계를 복원할 수 없습니다. 어떤 직원이 어느 부서에 소속되어 있는지 알 수 없게 됩니다.

따라서 위 관계는 손실 분해에 해당합니다.

정리

테이블을 분해할 때는 반드시 공통 속성(예: 사원ID)을 통해 조인이 가능하도록 설계해야 하며, 조인 결과가 원래의 관계와 동일하게 복원되는지 확인해야 합니다. 이것이 바로 무손실 분해와 손실 분해를 구분하는 핵심 기준입니다.