Licence
저작자표시-비영리-변경금지 2.0 대한민국 (CC BY-NC-ND 2.0 KR)
이용자는 다음의 권리를 갖습니다:
공유 — 복제, 배포, 전시, 공연 및 공중송신 (포맷 변경도 포함)
이상현상과 정규화
이상현상
불필요한 데이터 중복으로, 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용.
삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 같이 삽입해야 하는 문제
이벤트에 참여하지 않은 melon이라는 고객은 이벤트번호가 NULL값이라 이벤트참여 릴레이션에 넣을 수 없다.
이벤트참여 릴레이션에 삽입하기 위해서는 임시 이벤트번호라는 불필요한 데이터 값도 같이 삽입해야 한다.
갱신 이상: 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
아이디가 apple이라는 고객의 등급이 gold에서 vip로 변경되었는데 일부 투플에 대해서만 등급이 수정된다면,
apple 고객이 서로 다른 등급을 가지는 모순이 발생한다.
삭제 이상: 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
(이벤트 릴레이션에 고객의 모든 정보를 넣은 상황에서)
아이디가 orange인 고객이 이벤트 참여를 취소해 관련 투플을 삭제하게 되면 이벤트 참여과 관련이 없는
고객아이디, 고객이름, 등급 데이터까지 손실된다.
정규화
이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
함수적 종속성을 판단하여 정규화를 수행한다.
함수적 종속성(FD; Functional Dependency)
함수종속: X가 Y를 함수적으로 결정한다
릴레이션 내의 모든 투플을 대상으로 하나의 X(결정자) 값에 대한 Y(종속자) 값이 항상 하나이다 (X->Y)
X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합이다.
X(고객아이디)가 Y(고객이름 or 등급)을 결정한다.
== 각 고객아이디 속성 값에 대응되는 고객이름 속성과 등급 속성 값이 단 하나이다.
고객이름이 등급을 결정하지는 않는다(동명이인 등)
함수 종속 관계 판단 시 유의 사항
1. 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야한다
(속성 값은 계속 변할 수 있기 때문에 지금 겉보기에 함수종속이라도 의미를 따져보았을때는 아닐 수 있다).
2. 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정한다.
3. 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있다.
완전 함수 종속(FFD; Full Functional Dependency)
릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미한다.
일반적으로 함수 종속은 완전 함수종속을 의미한다.
ex) 당첨여부는 [고객아이디, 이벤트 번호]에 완전 함수 종속된다.
부분 함수 종속(PFD; Partial Functional Dependency)
릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
ex) 고객이름은 [고객아이디, 이벤트번호]에 부분 함수 종속된다.
고객이름은 고객아이디와 이벤트 번호를 조합한 속성 집합 [고객아이디, 이벤트번호]에 종속되어 있다.
또한 속성집합의 일부분인 [고객아이디]에도 종속되어 있기 때문에 부분 함수 종속이다.
이행적 함수 종속(transive FD)
릴레이션을 구성하는 세 개 의 속성 집합 X,Y,Z에 대해
함수 종속 관계 X->Y와 Y->Z가 존재하면 논리적으로 X->Z가 성립되는데
이것을 Z가 X에 이행적으로 함수 종속되었다고 한다.
ex) 고객ID가 등급을 결정하고, 등급이 할인율을 결정하면 고객ID가 할인율을 결정한다.
고려할 필요가 없는 함수 종속 관계
결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것 처럼 당연한 함수 종속관계는 고려하지 않는다
ex) 고객아이디 -> 고객아이디
ex) [고객아이디, 이벤트번호] -> 고객아이디
'Computer science > Database' 카테고리의 다른 글
ACID 원칙이란? (0) | 2023.09.12 |
---|---|
데이터베이스의 원리와 응용 8 (0) | 2022.04.09 |
데이터베이스의 원리와 응용 6 (0) | 2022.04.09 |
데이터베이스의 원리와 응용 5 (0) | 2022.04.09 |
데이터베이스의 원리와 응용 4 (0) | 2022.04.09 |