본문 바로가기

computer science

cs - 부분적 함수종속이란? : 예시로 보는 정규화 과정

 

부분적 함수 종속의 개념

  • 테이블의 속성이 복합 키의 전체가 아닌 일부에만 종속되는 경우, 이를 부분적 함수 종속이라고 합니다.
  • 예를 들어, 학생의 이름이 학생ID와 과목ID로 구성된 복합 키를 가진 테이블에서 학생ID에만 종속되는 경우, 학생 이름은 복합 키의 일부인 학생ID에 부분적으로 함수적으로 종속된다고 할 수 있습니다.

복합 키 (Composite Key)

  • 복합 키는 두 개 이상의 컬럼으로 구성된 키입니다.
  • 예를 들어, 학생ID와 과목ID가 결합하여 학생의 과목별 성적을 나타내는 테이블의 키로 사용될 수 있습니다.

부분적 함수 종속의 문제점

  • 부분적 함수 종속은 데이터 중복을 발생시킬 수 있습니다.
  • 예를 들어, 같은 학생이 여러 과목을 수강하는 경우, 학생의 이름이 각 과목마다 반복되어 저장됩니다.
  • 이러한 중복은 데이터베이스의 무결성을 해치고, 저장 공간의 비효율성을 초래합니다.

제2정규화 (2NF)에서의 역할

  • 제2정규화는 이러한 부분적 함수 종속을 제거하는 과정입니다.
  • 제2정규화를 통해 복합 키를 가진 테이블에서 모든 비기본 속성이 복합 키 전체에만 종속되도록 구조를 조정합니다.
  • 이를 통해 데이터 중복을 줄이고, 테이블의 구조를 더욱 명확하게 만들어 데이터 무결성을 향상시킬 수 있습니다.

예시: 학생 성적 테이블

상황: 여러 학생들이 여러 과목을 수강하고 있으며, 그들의 성적을 기록하는 테이블이 있습니다. 이 테이블은 학생 ID, 과목 ID, 학생 이름, 과목 이름, 그리고 성적을 포함합니다.

1단계: 1NF (제1정규형)

  • 모든 필드의 값은 원자적입니다.
  • 테이블 예시:

학생ID과목ID학생 이름과목 이름성적

S1 C1 김철수 수학 85
S1 C2 김철수 과학 90
S2 C1 이영희 수학 75
S2 C2 이영희 과학 80

부분적 함수 종속 발생

  • '학생 이름'은 '학생ID'에만 종속되어 있으며, '과목ID'에는 종속되지 않습니다.
  • '과목 이름'도 '과목ID'에만 종속되며, '학생ID'에는 종속되지 않습니다.

2단계: 2NF (제2정규형)

  • 부분적 함수 종속을 제거합니다.
  • 테이블 분할:
  1. 학생 테이블

학생ID학생 이름

S1 김철수
S2 이영희
  1. 과목 테이블

과목ID과목 이름

C1 수학
C2 과학
  1. 성적 테이블

학생ID과목ID성적

S1 C1 85
S1 C2 90
S2 C1 75
S2 C2 80

결과

  • 부분적 함수 종속을 제거함으로써 데이터 중복을 줄이고, 각 테이블의 명확한 역할을 정의했습니다.
  • 학생 정보와 과목 정보가 별도의 테이블로 분리되어, 데이터 무결성이 향상되었습니다.

 

이행적 함수 종속의 개념

이행적 함수 종속은 세 개의 속성 A, B, C가 있을 때 발생합니다:

  • A가 B에 함수적으로 종속되고 (즉, A -> B),
  • B가 C에 함수적으로 종속되지만 (즉, B -> C),
  • A가 C에 직접적으로 종속되지 않는 경우 (즉, A -> C는 A -> B -> C를 통해서만 성립)

이러한 상황에서 C는 A에 이행적으로 함수적으로 종속됩니다.

예시

학생들에 대한 테이블을 고려해 봅시다. 각 학생에게는 학생 ID(SID), 학과 이름(Department), 그리고 학과의 위치(Department Location)가 있습니다.

SIDDepartmentDepartment Location

1 컴퓨터 과학 건물 A
2 수학 건물 B
3 컴퓨터 과학 건물 A

여기서,

  • 학생 ID (SID)는 학과 이름(Department)에 함수적으로 종속됩니다 (SID -> Department).
  • 학과 이름(Department)은 학과 위치(Department Location)에 함수적으로 종속됩니다 (Department -> Department Location).
  • 따라서, 학생 ID (SID)는 학과 위치(Department Location)에 이행적으로 함수적으로 종속됩니다 (SID -> Department -> Department Location).

이행적 함수 종속의 문제점

이행적 함수 종속은 데이터 중복과 업데이트 이상을 초래할 수 있습니다. 위의 예에서, 같은 학과의 학생들이 여러 번 나열될 때마다 학과 위치가 반복적으로 기재되어야 하며, 학과 위치가 변경되면 여러 행을 업데이트해야 할 수 있습니다.

제3정규화 (3NF)에서의 역할

제3정규화는 이러한 이행적 함수 종속을 제거합니다. 이를 위해 종속성이 이행적인 속성들을 분리하여 별도의 테이블로 만듭니다. 위 예시에서는 학과와 학과 위치를 분리하여 학과 테이블을 별도로 만들 수 있습니다:

  1. 학생 테이블

SIDDepartment

1 컴퓨터 과학
2 수학
3 컴퓨터 과학
  1. 학과 테이블

DepartmentDepartment Location

컴퓨터 과학 건물 A
수학 건물 B

 

 

이렇게 분리함으로써 데이터 중복을 줄이고, 데이터 무결성을 향상시킬 수 있습니다.