DB ] 이상현상(Anomaly)과 함수 종속성(Functional Dependency)
이번 포스팅에서는 이상현상(Anomaly)과 함수 종속성(Functional Dependency)에 대해 알아보겠습니다.
본 포스팅은 다음 순으로 작성되었습니다.
1. 이상현상(Anomaly)
2. 함수 종속성(Functional Dependency)
1. 이상현상(Anomaly)
이상현상은 테이블 내의 데이터가 불필요하게 중복되어있어서 테이블을 조작할 때 발생되는 데이터 불일치 현상입니다. 테이블을 잘못 설계하여 오류가 발생하게 되는데, 이상현상에는 크게 3가지 이상현상이 있습니다. 이러한 문제들은 정규화를 통해서 해결할 수 있습니다.
❗❗ 정규화에 관해서는 아래 포스팅을 참고해 주세요. ❗❗
DB ] 정규화(Normalization)와 반정규화(De-normalization) / 정규화 방법 (1NF, 2NF, 3NF, BCNF)
정규화는 이상현상(Anomaly) 이 있는 릴레이션을 분해하여 이상현상을 없애는 과정입니다. 이번 포스팅에서는 정규화의 특징과 진행 방법에 대해 알아보겠습니다. ❗❗ 이상현상과 함수종속성에
dang-di.tistory.com
◼ 삽입 이상 (Insertion anomaly)
튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 (불필요한 데이터까지 추가해야 삽입할 수 있는) 현상입니다.
학번 | 학생명 | 학과코드 | 학과명 | 학과장코드 | 학과장명 |
1 | A | 101 | 경영학과 | 1000 | 학과장1 |
2 | B | 102 | 기계공학과 | 2000 | 학과장2 |
103 | 컴퓨터정보공학과 | 3000 | 학과장3 |
위의 (정규화되지 않은) 테이블에서 기본키는 학번이기 때문에 새로운 행을 삽입하기 위해서는 학번이 필수적입니다.
학과코드가 103인 컴퓨터정보공학과가 신설되어서 데이터를 삽입해야 하는 상황에는 신설학과에는 학생이 없으므로 추가할 수 없는 현상이 발생합니다. 이러한 현상은 삽입 이상입니다.
◼ 삭제 이상 (Deletionanomaly)
튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상입니다.
학번 | 학생명 | 학과코드 | 학과명 | 학과장코드 | 학과장명 |
1 | A | 101 | 경영학과 | 1000 | 학과장1 |
2 | B | 102 | 기계공학과 | 2000 | 학과장2 |
3 | C | 103 | 컴퓨터정보공학과 | 3000 | 학과장3 |
위의 테이블에서 학번이 3인 C 학생의 데이터를 삭제하면 컴퓨터정보공학과의 정보와 학과장 정보가 소멸되는 문제가 발생합니다. 이러한 형상은 삭제 이상입니다. 마찬가지로 정규화를 통해 테이블을 분리한다면 문제를 해결할 수 있습니다.
◼ 갱신 이상 (Update anomaly)
튜플 갱신 시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상이나 너무 많은 행을 업데이트하는 것입니다.
학번 | 학생명 | 학과코드 | 학과명 | 학과장코드 | 학과장명 |
1 | A | 101 | 경영학과 | 1000 | 학과장1 |
2 | B | 101 | 경영학과 | 1000 | 학과장1 |
3 | C | 101 | 경영학과 | 1000 | 학과장1 |
... | ... | ... | ... | ... | ... |
100 | 가 | 101 | 경영학과 | 1000 | 학과장1 |
경영학과의 학생이 100명이라고 할 때, 학과장이 바뀌어버린다면 위의 테이블에서는 100개의 데이터를 변경해야 합니다. 이런 비효율적인 문제가 발생하는 경우도 갱신 이상입니다. 마찬가지로 정규화를 통해 테이블을 분리한다면 문제를 해결할 수 있습니다.
2. 함수 종속성(Functional Dependency)
함수 종속성은 어떤 테이블의 속성 X와 Y에 대하여, X값에 의해 Y값이 유일하게 정해지는 관계를 말합니다. 이는 "Y는 X에 함수 종속이다"라고 하며, X→Y라는 기호로 나타냅니다. 이 때, X는 결정자(Determinant) Y는 종속자(Dependant)입니다.
◼ 완전 함수적 종속 (Full Functional Dependency)
종속자가 기본키를 구성하는 모든 속성에 종속되는 경우입니다.
학번 | 학생명 | 나이 | 거주지 |
1 | A | 20 | 서울 |
2 | B | 20 | 서울 |
이 경우 기본키는 학번입니다. 여기서 이름, 나이, 거주지는 기본키인 학번을 알아야 식별할 수 있습니다. 따라서 이름, 나이, 거주지는 학번에 완전 함수 종속된 관계입니다.
◼ 부분 함수적 종속(Partial Functional Dependency)
기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우입니다.
학번 | 학생명 | 학과코드 | 학과명 |
1 | A | 101 | 경영학과 |
2 | B | 102 | 기계공학과 |
기본키가 학번과 학과코드로 구성된 위의 릴레이션에서 학과명은 학과코드만 알아도 식별 가능합니다. 이 경우에 학과명은 기본키에 부분 함수 종속된 관계입니다.
◼ 이행적 함수 종속(Transitive Functional Dependecy)
A, B, C 세 속성이 있고 A→B, B→C 종속 관계가 있을 때, A→C가 성립하는 경우입니다.
품목코드 | 품목명 | 소분류 | 대분류 |
1 | 키보드 | 키보드 | 전자제품 |
2 | 배추 | 야채 | 식료품 |
품목코드를 알면 소분류를 알 수 있고, 소분류를 알면 대분류도 알 수 있습니다. 따라서 품목코드를 알면 대분류를 알 수 있으므로 이 경우는 이행적 함수 종속 관계입니다.
이렇게 이상현상과 함수 종속성에 대해서 알아보았습니다.
짠!