💡 핵심 인사이트
완전 함수적 종속은 테이블의 기본 키(PK)가 속성 2개 이상으로 이루어진 '복합키'일 때 따지는 가장 아름답고 이상적인 규칙입니다.
**"종속자(일반 컬럼)는 복합키를 구성하는 '모든' 기둥(속성)에 100% 온전히 의존해야 하며, 복합키 중 하나라도 빠지면 절대 값을 결정할 수 없는 끈끈한 완벽한 충성 상태"**를 말합니다.
제2정규형(2NF)을 달성하기 위한 궁극적인 목표입니다.
Ⅰ. 완전 함수적 종속의 완벽한 밸런스
어떤 테이블의 짱(기본 키)이 {학번, 과목코드} 2개로 뭉쳐진 복합키라고 가정합시다. 그리고 일반 컬럼(종속자)으로 성적이 있습니다.
- 수식:
{학번, 과목코드} -> 성적 - 테스트 1:
성적이라는 놈은{학번}하나만 알면 점수가 몇 점인지 나옵니까? ➔ 안 나옵니다. 철수가 무슨 과목을 들었는지 모르기 때문입니다. - 테스트 2: 그럼
{과목코드}하나만 알면 점수가 나옵니까? ➔ 안 나옵니다. DB 과목을 누가 들었는지 모르기 때문입니다. - 결론: 이
성적이라는 일반 컬럼은, 오직{학번}과{과목코드}두 개가 모두 완벽히 존재할 때만 그 값이 1개로 확정(예: A+)됩니다. 이처럼 종속자가 복합키 전체 덩어리에 완벽하게 의존하는 깨끗한 상태를 **'완전 함수적 종속'**이라고 부릅니다. (관계형 DB가 가장 사랑하는 형태입니다).
Ⅱ. 악당의 등장: 부분 함수적 종속 (Partial Dependency)
위의 훌륭한 테이블에 생각 없는 개발자가 이름과 학과라는 컬럼을 억지로 추가해 짬뽕시켜 버렸습니다.
- 현재 컬럼:
( [학번, 과목코드], 성적, 이름, 학과 )
[부분 종속의 발생]
이름과학과컬럼을 살펴보면 기가 막힙니다. 이 녀석들은 짱인 복합키 전체{학번, 과목코드}의 눈치를 보지 않습니다.- 오직 복합키의 일부분인
{학번}단 하나만 알면, 과목코드가 DB이든 OS이든 상관없이 '김철수', '컴퓨터학과'라고 값이 딱 결정되어 버립니다. - 수식:
{학번} -> 이름
이처럼 종속자가 복합 기본키 전체에 충성하지 않고, **그중 일부 키에만 기대어 값이 결정되는 얄미운 배신 행위를 '부분 함수적 종속'**이라고 합니다. 이 부분 종속이 테이블에 남아있으면, 앞서 배운 삽입/삭제/갱신 이상이라는 끔찍한 에러가 연쇄 폭발을 일으키며 DB를 파괴합니다. 이를 칼로 도려내어 테이블을 2개로 찢는 수술이 바로 **제2정규화(2NF)**입니다.
📢 섹션 요약 비유: 완전 함수 종속은 핵무기 발사 통제소의 **'동시 키 돌리기'**와 같습니다. 장군(학번)의 열쇠 1개와 대통령(과목코드)의 열쇠 1개가 둘 다 동시에 꽂혀서 돌아가야만 핵미사일(성적)이 발사되는 완벽하고 안전한 시스템입니다. 반면 부분 종속은 장군 열쇠 하나만 돌려도 발사되는 '뒷문 버그'가 있는 셈이므로, 이런 불량 미사일 발사대는 즉시 뜯어고쳐야(정규화) 시스템 폭파를 막을 수 있습니다.