Skip to Content
Suffering builds character

3.이상현상

이상현상(Anomaly)란 중복된 데이터 때문에 발생하며, 릴레이션에 존재하는 데이터에 의도하지 않은 이상 현상이 발생하는 것을 말함

정규화된 데이터 모델에서는 이상현상이 발생할 확률이 적음

중복된 데이터가 많은 데이터 모델에서는 다음과 같은 이상현상이 발생할 수 있음

  • 갱신(update) 이상: 릴레이션에서 속성의 값을 업데이트할 때 발생하는 데이터 이상 현상
  • 삭제(delete) 이상: 릴레이션에서 인스턴스를 삭제할 때 발생하는 데이터 이상 현상
  • 삽입(insert) 이상: 릴레이션에서 새로운 인스턴스를 삽입할 때 발생하는 데이터 이상 현상

1. 이상현상이 발생하는 예시 릴레이션

다음의 테이블은 앞서 설명한 이상현상이 발생할 수 있는 예시 테이블임

사번직원명부서명부서위치직급급여
101김철수영업부서울대리3200
102박민수영업부서울과장4500
103이영희인사부부산사원2800
104최지훈영업부서울사원3000
105정수빈개발부대전대리3500

1. 갱신(Update) 이상 문제

상황
회사가 영업부 사무실을 서울 → 인천으로 이전했다고 가정

영업부 위치 정보가 각 행들에 중복 저장되어 있기 때문에 모든 영업부 행의 부서위치 컬럼 데이터를 일괄적으로 수정해야 함

문제점
데이터 업데이트 과정에서 네트워크 오류 등으로 인해 일부 행만 수정되고 나머지는 수정되지 않을 경우, 데이터 불일치 발생(정합성 문제)
ex) 101, 102, 104 중 101와 102만 “인천”으로 변경되고, 104이 “서울”로 남아 있는 경우

2. 삭제(Delete) 이상 문제

상황
영업부 직원이 모두 퇴사해서 영업부 관련 행이 전부 삭제됨

문제점
영업부에 대한 부서 정보 자체(부서명·위치)가 사라짐
→ “영업부”라는 부서가 존재했는지에 대한 기본 정보까지 손실됨

3. 삽입(Insert) 이상 문제

상황
새로 “마케팅부”라는 부서를 만들었지만, 아직 직원이 한 명도 없음

문제점
현재 테이블 구조에서는 직원 데이터 없이 부서 정보를 저장할 수 없음
→ “마케팅부”의 부서명과 위치를 기록하려면 최소 한 명의 직원 레코드가 필요하므로 불필요한 NULL 값을 넣거나 임시 데이터를 입력해야 함

2. 발생원인 정리

이상현상이 발생한 원인은 부서 정보와 직원 정보를 하나의 테이블에 같이 저장하는 과정에서 중복 데이터가 발생했기 때문

따라서 해결책은 정규화를 통해 부서 테이블과 직원 테이블로 분리,
부서ID(PK)로 참조하게 만들면 중복과 이상현상을 줄일 수 있음

보다 구체적으로는 각 Attribute들 간의 종속성을 찾고, 하나의 릴레이션에는 하나의 종속성이 표현되도록 분리가 필요함
→ 이러한 분해 과정을 정규화(Normalization) 라고함

3. 정규화가 적용된 예시 미리보기

부서 테이블, Department

부서ID부서명부서위치
D001영업부인천
D002인사부부산
D003개발부대전
D004마케팅부서울

직원 테이블, Employee

사번직원명부서ID직급급여
101김철수D001대리3200
102박민수D001과장4500
103이영희D002사원2800
104최지훈D001사원3000
105정수빈D003대리3500

중복 제거
부서명·위치가 여러 직원 레코드에 반복 저장되지 않음

갱신 이상 방지
부서 위치 변경 시 부서 테이블의 한 행만 수정하면 됨

삭제 이상 방지
해당 부서 직원이 전부 퇴사해도 부서 테이블에는 부서 정보가 남아 있음

삽입 이상 방지
직원이 없어도 부서 정보를 부서 테이블에 미리 추가 가능

Last updated on