부분적 함수 종속의 개념
- 테이블의 속성이 복합 키의 전체가 아닌 일부에만 종속되는 경우, 이를 부분적 함수 종속이라고 합니다.
- 예를 들어, 학생의 이름이 학생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정규형)
- 부분적 함수 종속을 제거합니다.
- 테이블 분할:
- 학생 테이블
학생ID학생 이름
| S1 | 김철수 |
| S2 | 이영희 |
- 과목 테이블
과목ID과목 이름
| C1 | 수학 |
| C2 | 과학 |
- 성적 테이블
학생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정규화는 이러한 이행적 함수 종속을 제거합니다. 이를 위해 종속성이 이행적인 속성들을 분리하여 별도의 테이블로 만듭니다. 위 예시에서는 학과와 학과 위치를 분리하여 학과 테이블을 별도로 만들 수 있습니다:
- 학생 테이블
SIDDepartment
| 1 | 컴퓨터 과학 |
| 2 | 수학 |
| 3 | 컴퓨터 과학 |
- 학과 테이블
DepartmentDepartment Location
| 컴퓨터 과학 | 건물 A |
| 수학 | 건물 B |
이렇게 분리함으로써 데이터 중복을 줄이고, 데이터 무결성을 향상시킬 수 있습니다.
'computer science' 카테고리의 다른 글
| cs - 모듈러 연산자와 리터럴 (2) | 2023.12.26 |
|---|---|
| cs - 유닉스에서 기본 명령어 및 -r 옵션 (0) | 2023.12.24 |
| cs - 리눅스에서 하드 링크와 심볼릭 링크 (0) | 2023.12.20 |
| cs -진폭편이변조(ask),주파수편이변조(fsk),위상편이변조(psk) (0) | 2023.08.11 |
| cs - HDLC프로토콜 (0) | 2023.08.11 |