게임 개발자를 향해

이상 / 함수적 종속 본문

정보처리기사/2. 데이터 입출력 구현

이상 / 함수적 종속

뿌단이 2022. 9. 6. 00:12

1. 이상 (Anomaly)

  • 이상이란 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고 이 중복(Redundancy)으로 인해 테이블 조작시 문제가 발생하는 현상을 의미한다.
  • 이상의 종류에는 테이블 조작 중에 발생하는 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly) 이 있다.

 

 

<수강 릴레이션>

학번 과목번호 성적 학년
100 C413 A 4
100 E412 A 4
200 C123 B 3
300 C312 A 1
300 C324 C 1
400 C123 A 4
400 C312 A 4
400 C324 A 4
400 C413 B 4
400 E412 C 4
500 C312 B 2

 

1. 삽입 이상(Insertion Anomaly) : 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상이다.

 

2. 삭제 이상(Deletion Anomaly) : 테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는, 즉 연쇄 삭제가 발생하는 현상이다.

 

3. 갱신 이상(Update Anomaly) : 테이블에서 튜플에 있는 속성 값을 갱신할 일부 튜플의 정보만 갱신되어 정보에 불일치성(Inconsistency)이 생기는 현상이다.

 

 

<여기서 Tip!>

무조건 외워라.

 

 

2. 함수적 종속

  • 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이하 하자. 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성  Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수적 종속 또는 X가 Y를 함수적으로 결정한다고 하고 X → Y로 표기한다.
  • 함수적 종속은 데이터의 의미를 표현하는 것으로, 현실세계를 표현하는 제약조건이 되는 동시에 데이터베이스에서 항상 유지되어야 할 조건이다.
  • X → Y의 관계를 갖는 속성에서 X는 결정자(Determination)라 하고, Y를 종속자(Dependent)라고 한다.

 

<학생>

학번 이름 학년 학과
400 이순신 4 컴공과
422 유관순 4 물리학과
301 강감찬 3 수학과
320 김뿌단 3 체육과

 

학생 릴레이션학번이 기본키이다.

그렇다면 이름, 학년, 학과 속성은 학번 속성에 함수적 종속이라고 한다.

 

<표시 예1>

학번 → 이름

학번 → 학년

학번 → 학과

 

<표시 예2>

학번 → 이름, 학년, 학과

 


<수강>

학번 과목번호 성적 학년
100 C413 A 4
100 E412 A 4
200 C123 B 3
300 C312 A 1
300 C324 C 1
400 C123 A 4
400 C312 A 4
400 C324 A 4
400 C413 B 4
400 E412 C 4
500 C312 B 2

 

수강 테이블의 속성 중 성적은 (학번, 과목번호)에 의해 값이 정해진다.

이를 완전 함수적 종속(Full Functional Dependency)이라고 한다.

 

수강 테이블의 속성 중 학년은 (학번, 과목번호)에 의해 값이 정해지지 않는다.

이를 부분 함수적 종속 (Partial Functional Dependency)이라 한다.

 

<표시>

학번, 과목번호 → 성적

학번 → 학년

 

 

<여기서 Tip!>

이게 무슨말이냐 하면, 일단 이 수강 테이블의 키는 [학번], [과목번호] 두 속성으로 만든 것이다.

이 테이블은 단순 예시이며 엄밀히 따지면 최소성에 반하기 때문에 기본키 선택을 잘못 한 테이블이다.

이 개념은 다음 챕터에서 다루기 때문에 넘어가겠다.

 

일단 학번과 과목번호에 의해 값이 정해진다는 것은 아래와 같다.

 

학번을 가진 사람 A가 하나의 과목의 시험을 치렀는데 두 개의 점수가 나올 수 있을까? 한 사람은 한 과목에 하나의 점수만 받을 수 있으므로 말이 안된다.

 

결론적으로 A의 학번과 A가 수강한 과목점수의 속성값을 결정한다는 것이다.덧붙이자면 학번 값과 과목 값이 같으면 점수 값도 같아야 한다는 말이다. 이를 [점수]는 [학번], [과목번호] 완전 함수적 종속이라고 표현한다.

 

반대로 학번을 가진 사람 A와, A가 수강한 과목이 A의 학년을 결정할 수 있을까?과목학년은 전혀 상관이 없으므로 말이 안된다.

 

그럼 학번만이 A의 학년을 결정할 수 있을까?그건 가능하다.

 

결론적으로 [학번]이 A의 학년을 결정할수 있을 뿐이지, [학번], [과목번호] 두 속성이 학년을 결정하지 않는 것이다.

이를  [학년]은 [학번], [과목번호]부분 함수 종속이라고 표현하는 것이다.

 

이 개념을 배우는 이유는 부분함수적 종속은 테이블을 설계할 때 없애야 하는 요소이기 때문이다.

다음 챕터 정규화에서 부분함수적 종속을 없애는 과정 그리고 또다른 정규화를 배울 것이다.

 

 

 

읽어주셔서 감사합니다!

정처기 화이팅!