CS/DB

[DB] 릴레이션 분해

겜도리도리 2022. 5. 26. 03:39
반응형

릴레이션 분해 개요

릴레이션 분해란, 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것이다.

릴레이션을 분해하면 중복이 감소되고 갱신 이상이 줄어드는 장점이 있는 반면에, 바람직하지 않은 문제들을 포함하여 몇 가지 잠재적인 문제들을 야기할 수 있다.

첫 번째, 릴레이션이 분해되기 전에는 조인이 필요 없던 질의가 분해 후에는 조인을 필요로 하는 질의로 바뀔 수 있다.

두 번째, 분해된 릴레이션들을 사용하여 원래 릴레이션을 재구성하지 못할 수 있다.

무손실 분해(Lossless decomposition)

분해된 두 릴레이션을 조인하면, 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있다.

여기서 손실이란 정보의 손실을 말한다.

정보의 손실은 원래의 릴레이션을 분해한 후에 생성된 릴레이션들을 조인한 결과에 들어 있는 정보가 원래의 릴레이션에 들어 있는 정보보다 적거나 많은 것을 모두 포함한다.

릴레이션 분해 예시

 

학생 릴레이션
학생 릴레이션의 결정자
학생 릴레이션을 두 릴레이션으로 분해하기

위의 릴레이션 분해는 학생1 릴레이션과 수강 릴레이션을 조인하면 원래 학생 릴레이션에 존재하는 정보를 완전하게 얻을 수 있다. 따라서 위 릴레이션 분해는 무손실 분해이다.

불필요한 분해

학생1 릴레이션을 학생2와 학생3 릴레이션으로 분해하는 것은 불필요한 분해이다.

학생1 릴레이션에는 정보의 중복이 발생하지 않기 때문이다.

또한 학번이 불필요하게 2번 저장된다.

나쁜 분해

수강 릴레이션을 수강1과 수강2 릴레이션으로 분해하는 것은 나쁜 분해이다.

과목번화와 학점과의 연관이 표현되지 않았기 때문이다.

수강1  릴레이션과 수강2 릴레이션을 조인하게 되면 수강 릴레이션보다 많은 튜플이 생성된다.

이 때 생성된 튜플 중 원래 릴레이션에 존재하지 않는 튜플을 가짜 튜플이라고 한다.

가짜 튜플

반응형

'CS > DB' 카테고리의 다른 글

[DB] 뷰  (0) 2022.06.07
[DB] 정규화와 역정규화  (0) 2022.05.28
[DB] 함수적 종속성  (0) 2022.05.26
[DB] 정규화 개요  (0) 2022.05.26
[DB] 다단계 인덱스  (0) 2022.05.20