코수가 되는 길
데이터베이스 개론 - 정규화(1) : 이상현상, 함수 종속 판단 본문
이상 현상 - 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
이러한 이상현상을 제거하면서 데이터베이스를 설계해나가는 과정이 "정규화"
정규화 - 이상현상을 제거하면서 데이터베이스를 설계해 나가는 과정
이상현상의 3가지 종류
삽입 이상 - 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
갱신 이상 - 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
삭제 이상 - 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
아래의 릴레이션을 통해 이상현상들이 발생하는 예시를 보도록 하자.

이벤트 참여 릴레이션의 예시를 보면, 한 고객이 여러 이벤트에 참여할 수 있으므로 기본키가 고객아이디와 이벤트번호로 구성됨.
삽입 이상이 발생하는 예시 : 아직 이벤트에 참여하지 않은 아이디가 melon , 이름이 성원용, 등급이 gold인 신규 고객의 데이터는 이벤트 참여 릴레이션에 삽입할 수 없음 - 이벤트번호가 null 이기 때문. (개체 무결성 위반. 기본키 속성은 널 값을 가질 수 없음)
즉 성원용 고객의 데이터를 삽입하려면 참여하지 않은 임시 이벤트 번호를 삽입해야 하므로 삽입 이상이 발생한다.
갱신 이상이 발생하는 예시 : 아이디가 apple 인 고객의 등급이 gold 에서 vip로 변경 될 때, 일부 튜플에 대해서만 등급이 수정된다면 apple 고객이 서로 다른 등급을 가지는 모순이 발생.
삭제 이상이 발생하는 예시 : 아이디가 orange인 고객이 이벤트 참여를 취소해 관련 튜플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객아이디, 고객이름, 등급 데이터까지 손실됨.
정리 : 이러한 이상들이 발생하는 이유는 관련이 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문.
이상현상이 발생하지 않도록 관련 있는 속성들로만 릴레이션을 구성해야함 -> 정규화의 필요성
정규화는 함수 종속성* 을 판단하여 릴레이션을 분해하는 과정
함수 종속 : "X가 Y를 함수적으로 결정한다"
- 릴레이션 내의 모든 튜플에서 하나의 X값에 대한 Y값이 항상 하나임.
- X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합.
- Y가 X에 함수적으로 종속 되어 있다 와 같은의미
- X->Y 로 표현 ( X는 결정자, Y는 종속자 )

함수 종속 판단 예시

- 각 고객아이디 속성 값에 대응되는 고객이름 속성과 등급 속성이 단 하나이므로 고객 아이디가 고객이름과 등급을 결정한다고 볼 수 있음.
-> 고객아이디 : 결정자 / 고객이름, 등급 : 종속자
함수 종속 판단 시 유의사항
- 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 함
(속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값으로만 판단하면 안됨)
- 일반적으로 튜플을 유일하게 구별하는 기본키와 후보키는 그 특성 때문에 릴레이션을 구성하는 다른 모든 속성들을 함수적으로 결정.

- 고객아이디가 고객이름을 유일하게 결정
- {고객아이디 , 이벤트번호} 속성집합은 당첨여부 속성을 유일하게 결정
- 고객이름도 {고객아이디, 이벤트번호} 에 종속되어 있음. (부분함수종속)
고객아이디 -> 고객이름
{고객아이디, 이벤트번호} -> 당첨여부
{고객아이디, 이벤트번호} -> 고객이름 (부분함수종속)

완전 함수 종속 (FFD : Full Functional Dependency)
- 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미
부분 함수 종속 (PFD : Partial Functional Dependency )
- 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
'Study > DB' 카테고리의 다른 글
| 데이터베이스 개론 - 트랜잭션 (0) | 2022.12.02 |
|---|