-
8일차 - 정규화CS지식/데이터베이스 2021. 4. 30. 22:55
오늘은 정규화에 대해서 배웠다.
정보처리기사 필기를 준비하면서 정규화에 대해 들어본 적은 있지만 개념이 확실히 잡혀있지는 않았다.
오늘 강의를 통해 정규화에 대해 확실히 알 수 있는 계기가 되었다.
1. 정규화란?
정규화는 이상현상이 발생하지 않도록 릴레이션을 관련있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이다.
여기서 이상현상은 무엇을 의미할까?
이상현상은 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 삭제 수정 연산을 수행할 때 발생할 수 있는 악영향이다.
이상현상에는 삽입이상, 갱신이상, 삭제이상 3가지가 존재한다.
- 삽입이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신이상: 중복 튜플 중 일부만 변경하여 데이터 불일치가 발생하는 모순의 문제
- 삭제이상: 튜플을 삭제하면 반드시 필요한 데이터가 함께 삭제되는 데이터 손실의 문제
2. 함수적 종속성(FD, Functional Dependency)
위에서 정규화는 관련있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이라고 했다.
그러면 관련있는 속성들을 어떻게 판단하는 것일까?
여기서 함수적 종속성을 판단하여 정규화를 수행하게 된다.
함수적 종속성은 속성들간의 관련성으로 함수적 종속성을 이해하기 위해서는 함수적 종속이라는 단어의 의미를 되새겨봐야한다.
우리는 수학시간에 함수를 배운 경험이 있을 것이다. 입력 x집합과 출력 y집합이 있고 이 두 집합이 함수관계를 이룬다면 하나의 x값에 대한 y값이 항상 하나여야한다.
이 개념을 릴레이션으로 가져와서 생각해보면 X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분집합이라고 해보자.
여기서 릴레이션 내의 모든 튜플을 대상으로 X집합에서의 하나의 값에 대한 Y값(Y집합 내의 값)이 항상 하나라는 것이 함수적 종속성이다.
예를 들어 설명을 하면 더 이해하기 쉬울 것이다.
한 릴레이션에 사용자ID, 사용자명, 등급이라는 속성이 존재한다.
사용자 ID 사용자명 등급 apple 김복순 gold banana 이순희 sliver candy 박소휘 gold dragon 최국수 dia eagle 현실훈 bronze 여기서 함수 종속 관계는 어떻게 이루어 질까?
사용자ID(X) -> 사용자명(Y) 관계와 사용자 ID(X) -> 등급(Y)이라는 관계를 가질 수 있다.
이뉴는 하나의 사용자 ID는 한 명의 사용자명만 가리키고 여러 명을 가질 수는 없다. 등급도 마찬가지이다.
그러면 사용자명 -> 사용자 ID는 가능할까?
릴레이션만 봤을 때는 가능해보이지만 동명이인이 존재할 수 있기 때문에 불가능하다.
여기서 추가로 알아두어야 할 개념은 X->Y를 이루는 함수종속관계에서 X를 결정자, Y를 종속자라고 부른다.
이러한 함수 종속 관계를 판단할 때 유의해야할 사항이 몇 가지 있다.
- 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야한다.
속성 값 자체는 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안되기때문이다.
- 일반적으로 기본키와 후보키는 릴레이션의 다른 속성들을 함수적으로 결정하는 결정자 역할을 한다.
- 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성도 함수종속관계에서 결정자가 될 수 있다.
3. 함수종속 분류
함수종속에는 완전함수종속, 부분함수종속, 이행적 함수종속 3가지가 존재한다.
1) 완전함수종속 (FFD, Full Functional Dependency)
완전함수종속은 릴레이션에서 속성 집합 Y(종속자)가 속성 집합 X(결정자)에 함수적으로 종속되어 있지만 속성 집합X의 전체가 아닌 일부분에는 종속되지 않음을 의미한다.
일반적으로 함수 종속은 완전함수종속을 의미한다.
2) 부분함수종속( PFD, Partial Functional Dependency)
부분함수종속은 속성집합 Y가 속성집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미한다.
3) 이행적 함수종속(transitive FD)
릴레이션을 구성하는 세 개의 속성집한 X,Y,Z에 대해 함수종속관계 X->Y, Y->Z가 존재하면 논리적으로 X->Z가 성립되는데, 이것을 Z가 X에 이행적으로 함수 종속되었다고 한다.
'CS지식 > 데이터베이스' 카테고리의 다른 글
10일차 - 관계 데이터 연산 (0) 2021.05.06 9일차 - 정규형과 정규화 예제 (0) 2021.05.03 7일차 - 관계 데이터 모델링: 실습 (0) 2021.04.27 6일차 - 관계 데이터 모델링 (0) 2021.04.23 5일차 - 개념적 데이터 모델링: 실습 (0) 2021.04.20