Anomaly

이상 현상 - 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류

Posted by Seohyun Park, Aileen on November 29, 2023 · 5 mins read
DATABASE

Anomaly ( 이상 현상 )

Anomaly (이상 현상)은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 말합니다.

이상 현상은 갱신 이상(Modification ANomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)으로 구성됩니다.


갱신 이상 (Modification Anomaly)

갱신 이상은 테이블에 저장된 데이터 중에서 일부만 변경되어 데이터의 불일치가 발생하는 현상을 말합니다.

예를 들어, 학생의 성적을 저장하는 테이블이 있습니다.

학번 이름 학년 성적
1 홍길동 1 90
2 김철수 2 80
3 박영희 3 70

위 테이블에서 학번이 1인 학생의 성적을 100점으로 변경하고자 합니다.

그러면, 학번이 1인 학생의 성적만 변경하면 되는 것이 아니라, 학번이 1인 학생의 모든 데이터를 변경해야 합니다.

그렇지 않으면, 학번이 1인 학생의 성적이 100점이 되었지만, 학년은 1학년으로 그대로 남아있는 데이터의 불일치가 발생합니다.


삽입 이상 (Insertion Anomaly)

삽입 이상은 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들도 함께 삽입되어 발생하는 현상을 말합니다.

예를 들어, 학생의 성적을 저장하는 테이블이 있습니다.

학번 이름 학년 성적
1 홍길동 1 90
2 김철수 2 80
3 박영희 3 70

위 테이블에서 학번이 4인 학생의 성적을 저장하고자 합니다.

그러면, 학번이 4인 학생의 성적만 저장하면 되는 것이 아니라, 학번이 4인 학생의 이름과 학년도 함께 저장해야 합니다.

그렇지 않으면, 학번이 4인 학생의 성적만 저장되고, 이름과 학년은 NULL 값으로 저장되어 데이터의 불일치가 발생합니다.


삭제 이상 (Deletion Anomaly)

삭제 이상은 테이블에서 특정 데이터를 삭제할 때 의도와는 상관없이 원하지 않은 값들도 함께 삭제되어 발생하는 현상을 말합니다.

예를 들어, 학생의 성적을 저장하는 테이블이 있습니다.

학번 이름 학년 성적
1 홍길동 1 90
2 김철수 2 80
3 박영희 3 70

위 테이블에서 학번이 1인 학생의 성적을 삭제하고자 합니다.

그러면, 학번이 1인 학생의 성적만 삭제하면 되는 것이 아니라, 학번이 1인 학생의 이름과 학년도 함께 삭제해야 합니다.

그렇지 않으면, 학번이 1인 학생의 성적만 삭제되고, 이름과 학년은 남아있는 데이터의 불일치가 발생합니다.


함수 종속성 (Functional Dependency)

함수 종속성은 데이터베이스에서 테이블을 정규화하는 데 사용되는 개념입니다.

함수 종속성은 테이블에서 한 컬럼의 값이 다른 컬럼의 값을 유일하게 결정하는 것을 말합니다.

예를 들어, 학생의 성적을 저장하는 테이블이 있습니다.

학번 이름 학년 성적
1 홍길동 1 90
2 김철수 2 80
3 박영희 3 70

위 테이블에서 학번이 1인 학생의 이름은 홍길동, 학년은 1학년, 성적은 90점입니다.

이때, 학번이 1인 학생의 이름은 홍길동, 학년은 1학년, 성적은 90점으로 고정되어 있습니다.

즉, 학번이 1인 학생의 이름은 학번이 1인 학생의 학년과 성적에 종속되어 있습니다.

이러한 종속 관계를 함수 종속성이라고 합니다.


완전 함수 종속성 (Fully Functional Dependency)

어떤 속성이 다른 속성들의 전체 집합에만 종속되는 경우를 말합니다. 예를 들어, 복합 키가 있을 때, 모든 키의 조합에만 종속되는 속성이 완전 함수 종속입니다. 예를 들어, 학생의 성적을 저장하는 테이블이 있습니다.

학번 이름 학년 성적
1 홍길동 1 90
2 김철수 2 80
3 박영희 3 70

위 테이블에서 학번이 1인 학생의 이름은 홍길동, 학년은 1학년, 성적은 90점입니다.

이때, 학번이 1인 학생의 이름은 홍길동, 학년은 1학년, 성적은 90점으로 고정되어 있습니다.

이때, 학번이 1인 학생의 이름은 학번이 1인 학생의 학년과 성적에 종속되어 있지만, 학번이 1인 학생의 학년과 성적은 학번이 1인 학생의 이름에 종속되어 있지 않습니다.

학생의 ‘이름’, ‘학년’, ‘성적’은 모두 ‘학번’에 완전 함수 종속적입니다. ‘학번’은 각 학생을 고유하게 식별하는 기본 키이기 때문에, 이 키에 종속된 모든 속성은 해당 학번에만 연관되어 있습니다.