타닥타닥/DB

DB ] 이상현상(Anomaly)과 함수 종속성(Functional Dependency)

땅디 2023. 1. 9. 20:14

 

  이번 포스팅에서는 이상현상(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 배추 야채 식료품

  품목코드를 알면 소분류를 알 수 있고, 소분류를 알면 대분류도 알 수 있습니다. 따라서 품목코드를 알면 대분류를 알 수 있으므로 이 경우는 이행적 함수 종속 관계입니다.

 

 


 

이렇게 이상현상과 함수 종속성에 대해서 알아보았습니다.

 

짠!