이상현상
태그 :
- 개념
- -데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상 - 하나의 릴레이션에 두 개 이상의 실체의 속성들을 혼합하여, 즉 정규화 되지 않은 경우 데이터의 중복이 원인이 되어 발생함
1. 정규화가 필요한 이유, 이상현상의 개요
가. 이상 현상의 발생 원인
- 여러 종류의 사실들을 하나의 릴레이션으로 표현하려고 하기 때문
- 속성들간에 존재하는 여러가지 종속관계에 대해 정규화가 실행되지 않았기 때문
나. 이상현상의 해결
- 애트리뷰트들 간의 종속성(dependency)을 분석해서 하나의 릴레이션에는 하나의 종속성이
- 표현되도록 분해 => 스키마 변환 (schema transformation)
다. 스키마 변환의 원리
- 정보의 무손실 표현 : 스키마 변환 시, 정보의 손실이 있어서는 안됨.
- 최소의 데이터 중복성(minimal data redundancy)만이 허용 : 중복으로 인한 이상현상 제거
- 분리의 원칙(principle of separation) : 하나의 독립된 관계성은 하나의 릴레이션으로 분리
2. 이상 현상의 종류
종 류 |
주요 개념 |
갱신이상 (Update Anomaly) |
릴레이션 R에서 특정 속성값 갱신 시 중복 저장되어 있는 속성값 중 하나만 갱신하고, 나머지는 갱신하지않아서 발생하는 데이터의 불일치 현상(Data Inconsistency) |
삭제이상 (Deletion Anomaly) |
릴레이션 R에서 특정 투플을 삭제할 경우 원하지 않는정보까지도 삭제되는 현상 |
삽입이상 (Insertion Anomaly) |
릴레이션 R에서 특정 투플을 삽입할 경우 원하지 않는불필요한 정보까지도 삽입해야 하는 현상 |
3. 이상 현상 사례 및 해결 방안
가. 1차 정규화가 필요한 이상현상
1) 사례
2) 이상현상
구 분 |
내 용 |
삽입 이상 (Insertion Anomaly) |
컴퓨터라는 제품명을 입력하려면, 주문하지도 않은 주문번호, 주문수량을 입력해야 함 |
갱신 이상 (Update Anomaly) |
주문수량을 수정하려면, 제품 수 만큼 수정해야 함 |
삭제 이상 (Deletion Anomaly) |
특정 제품을 삭제하려고 하면, 주문한 내용까지도 같이 삭제됨 |
3) 해결방안
- 1차 정규화(중복속성 분리)를 통하여 입력, 수정, 삭제 이상현상 해결
나. 2차 정규화가 필요한 이상현상
1) 사례
학번 |
과목코드 |
과목명 |
학점 |
100 |
C413 |
운영체제 |
A |
100 |
C412 |
데이터베이스 |
A |
200 |
C123 |
SW공학 |
B |
300 |
C312 |
자료구조 |
A |
300 |
E324 |
영어 |
C |
300 |
C413 |
운영체제 |
B |
2) 이상현상
구 분 |
내 용 |
삽입 이상 (Insertion Anomaly) |
학번 Key 추가시, 수강한 과목이 없어도 임의의 과목코드를 만들어 삽입해야 함 |
갱신 이상 (Update Anomaly) |
학번 300과 과목코드 C413의 과목명을 변경시 {100, C413}의 과목명과 다른 이름을 갖게 됨 |
삭제 이상 (Deletion Anomaly) |
300 학번의 영어 과목 학점을 삭제하면, 영어 과목까지 삭제됨 |
3) 해결방안
- 부분함수 종속 제거, 과목명이 기본키의 일부인 과목코드에 종속인 구조 제거
3차 정규화가 필요한 이상현상
1) 사례
사번 |
부서코드 |
부서명 |
100 |
A10 |
기획부 |
200 |
A20 |
인사부 |
300 |
A30 |
영업부 |
400 |
A40 |
기획부 |
2) 이상현상
구 분 |
내 용 |
삽입 이상 (Insertion Anomaly) |
새로운 tuple 사번 ‘500’을 삽입하려고 할 때, 부서코드에 추가적으로 불필요한 부서명까지 삽입해야 하는 현상 |
갱신 이상 (Update Anomaly) |
사번 ‘300’의 tuple을 삭제하면, 부서코드 ‘A30’의 영업부 데이터도 함께 삭제되는 현상 |
삭제 이상 (Deletion Anomaly) |
부서코드 ‘A10’ 기획부의 부서명을 “총무부”로 변경하고자 할 때 사번 ‘100’의 부서명만 변경하면 사번 ‘400’의 부서명과 일치하지 않아 모순이 발생하는 현상 |
3) 해결방안
- 일반속성인 부서코드와 부서명 간에 FD관계가 있으므로 분리하여 이상현상 해결
라. 릴레이션 R(수강지도)의 이상현상
릴레이션 R : 수강지도
학번 |
지도교수 |
학과 |
과목번호 |
성적 |
1001 |
홍길동 |
경영 |
9101 |
A |
1001 |
홍길동 |
경영 |
9104 |
B |
1001 |
홍길동 |
경영 |
9105 |
A |
1002 |
최수영 |
경영 |
9103 |
A |
1005 |
강병수 |
전자 |
9101 |
C |
1006 |
홍길동 |
경영 |
9105 |
A |
1006 |
홍길동 |
경영 |
9101 |
B |
1) 삽입이상
- 릴레이션 R에서 어느 특정 학생(1002)이 어떤 교과목(9103)을 등록할때까지는 그 학생의 지도교수가 누구라는 사실을 삽입 불가
- 특정 튜플을 삽입하려고 할때 원하지 않는 불필요한 데이터도 함께 삽입해야하는 현상
2) 삭제이상
- 릴레이션 R에서 튜플(1005)이 하나만 있는 상황에서 교과목을 삭제하면 지도교수 정보 (강병수)를 잃어버리게 됨
- 특정 튜플을 삭제할 경우 유지되어야 할 정보까지도 삭제되는 연쇄 삭제 현상
3) 갱신이상
- 릴레이션 R에서 어떤 학생에 대한 지도교수 속성값이 여러 번 중복되어 변경 시 문제가 발생
- 특정 속성값 갱신시에 중복저장되어 있는 속성값 중 하나만 갱신 하고, 나머지는 갱신하지 않아
발생하는 데이터 불일치 현상