[6] 이상현상과 함수종속

hyunsooo·2023년 6월 14일
0
post-thumbnail

1. 정규화의 개념과 이상 현상

정규화이상(anomaly)현상을 제거하고 데이터베이스를 올바르게 설계하기 위한 과정입니다. 여기서 이상현상은 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용입니다.

1.1. 이상 현상의 종류


출처 : <최정균님의 github>

삽입 이상


출처 : <최정균님의 github>

삽입 이상은 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제입니다.
위의 예시에서 melon이라는 고객은 이벤트에 참여하지 않았기 때문에 데이터 삽입이 불가능한 상황입니다. 따라서 이 고객의 데이터를 삽입하려면 실제로 참여하지 않는 임시 이벤트 번호(불필요 데이터)를 삽입해야합니다.

갱신 이상


출처 : <최정균님의 github>

갱신 이상은 중복 튜플 중 일부만 변경하여 데이터 불일치하게 되는 모순의 문제입니다.
위의 예시에서 apple이라는 동일한 고객의 중복된 튜플이 존재합니다. 만약 apple의 등급이 gold에서 vip로 바뀌었는데 한 개의 튜플에는 등급이 바뀌지 않아 갱신 이상이 발생한 상황입니다.

삭제 이상

삭제 이상은 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제입니다.
위의 예시에서 orange라는 고객이 이벤트 참여를 취소한 상황입니다. 이 정보를 반영하기 위해 orange에 대한 튜플이 삭제가 된다면 등급이나 고객이름과 같이 꼭 필요한 데이터도 연쇄적으로 삭제되는 현상이 발생합니다.

1.2. 정규화

정규화는 위의 세 가지 이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성(함수적 종속성)들로만 구성하기 위해 릴레이션을 분해(decomposition)하는 과정입니다. 즉, 함수적 종속성을 판단하여 정규화를 수행하게 됩니다.

2. 함수 종속

함수적 종속성 (FD; Functional Dependency)은 속성들 간의 관련성을 말합니다.

2.1. 함수 종속

릴레이션 내의 모든 튜플을 대상으로 하나의 X값에 대한 Y값이 항상 하나인 경우 함수 종속이라고 합니다. X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합이기 때문에 Y가 X에 함수적으로 종속되어 있다고 표현할 수 있습니다.

XYX:결정자Y:종속자X \rightarrow Y \\ X : \text{결정자} \\ Y : \text{종속자} \\

예를 들어 고객 릴레이션이 고객 아이디(기본키), 고객이름, 등급의 속성으로 이루어져 있다면, 고객이름은 고객아이디에 종속되어 있다고 할 수 있습니다. 또는 등급은 고객아이디에 종속되어 있다고 할 수 있습니다. 반면에 고객이름과 등급의 관계에서는 같은 이름을 가진 고객이 다른 등급을 가질 수 있는 상황이 생길 수 있기 때문에 종속되어 있지 않게 됩니다. 다이어그램에서는 화살표로 표현할 수 있습니다.

2.2. 함수 종속 관계 판단 시 유의 사항

속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안됩니다. 따라서 속성 자체의 특성과 의미를 기반으로 종속성을 판단해야 합니다. 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정합니다. 또한 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있습니다.

2.3. 함수 종속 관계 판단 예시


출처 : <최정균님의 github>

고객 아이디는 고객 이름을 결정하게 됩니다. 그러므로 고객 이름은 고객 아이디에 종속되어 있습니다. 또한 고객 아이디와 이벤트 번호를 묶은 속성 집합은 당첨여부와 고객이름을 결정하게 됩니다.

위의 예시의 고객아이디와 고객 이름 관계 처럼 속성 집합 Y가 속성 집합 X 전체에 대하여 함수적으로 종속되어 있을때 완전 함수 종속이라고 합니다. 반면에 (고객아이디, 이벤트번호)에 고객 이름과의 관계 처럼 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 종속되는 경우를 부분 함수 종속이라고 합니다.

이행적 함수 종속(transitive FD)

릴레이션을 구성하는 세 개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X -> Y와 Y -> Z가 존재하면 논리적으로 X -> Z가 성립되는데 이를 Z가 X에 함수 종속되었다고 한다.

예를 들어 X가 고객 아이디, Y가 등급, Z가 할인율 속성이라면 고객 아이디는 등급을 결정하고(X -> Y) 등급은 할인율을 결정(Y -> Z)합니다. 이런 상황에는 고객 아이디가 할인율을 결정(X -> Z)하기 때문에 이행적 함수 종속 관계에 있다고 합니다.

고려할 필요가 없는 함수 종속 관계

  • 결정자와 종속자 같음 : 고객아이디 -> 고객아이디

  • 결정자가 종속자를 포함 : (고객아이디, 이벤트번호) -> 이벤트번호

profile
CS | ML | DL

0개의 댓글