💡 핵심 인사이트
부분 함수적 종속은 테이블의 기본 키(PK)가 두 개 이상의 속성이 합쳐진 '복합키'일 때만 나타나는 데이터베이스의 독버섯입니다.
종속자(일반 컬럼)가 복합키 전체의 덩어리에 충성하지 않고, 그중 '일부분(하나의 키)'의 눈치만 보고도 자신의 값이 뻔하게 결정되어 버리는 얄미운 배신 행위를 뜻합니다. 이 독버섯을 칼로 도려내어 테이블을 찢는 것이 **제2정규형(2NF)**입니다.
Ⅰ. 복합키(Composite Key) 환경의 이해
학번 하나만으로는 테이블의 행을 유일하게 식별할 수 없어 {학번, 과목코드}처럼 두 개를 본드로 묶어 '기본 키 연합'을 만들었을 때, 이를 복합키라고 합니다.
정상적이고 훌륭한 테이블이라면(완전 함수 종속), 이 테이블의 일반 정보(예: 성적)는 반드시 저 두 개의 키가 모두 있어야만 값을 알 수 있어야 합니다.
Ⅱ. 부분 종속의 치명적 발생 시나리오
개념 없는 설계자가 아래와 같은 수강 테이블을 만들었습니다.
- 테이블 구조:
( [학번, 과목코드](PK), 성적, 이름, 학과 )
[ 종속성 X-Ray 분석 ]
-
성적컬럼 (착한 놈): "학번 101번의 성적이 뭡니까?" ➔ 알 수 없음 (무슨 과목인지 모름). "DB 과목의 성적이 뭡니까?" ➔ 알 수 없음 (누구 점수인지 모름). "101번의 DB 과목 성적은?" ➔ A+ (1개로 결정됨!). ➔ 즉,성적은 복합키{학번, 과목코드}전체에 100% 의존하는 훌륭한 완전 함수적 종속입니다. -
이름과학과컬럼 (나쁜 놈 / 부분 종속 발생): "학번 101번의 이름과 학과가 뭡니까?" ➔ 과목코드가 무엇인지 물어볼 필요도 없이, "김철수, 컴퓨터학과"라고 값이 100% 하나로 떨어집니다. ➔ 즉, 이 녀석들은 짱인 복합키{학번, 과목코드}전체에 충성하지 않고, 오직 일개 부대장인 **{학번}이라는 일부분에만 충성(종속)**하여 값이 결정되는 기형적인 구조를 가집니다.- 수식:
{학번} -> 이름, 학과(부분 종속 발생)
- 수식:
Ⅲ. 부분 종속이 일으키는 끔찍한 이상 현상 (Anomaly)
이 얄미운 부분 종속 컬럼들(이름, 학과)을 테이블에 그대로 놔두면 어떻게 될까요?
- 철수가 5과목을 수강 신청하면? 철수라는
이름과학과데이터가 테이블에 5번이나 쓸데없이 중복해서 똑같이 복사되어 들어갑니다 (공간 낭비). - 나중에 철수가 수학과로 전과해서 학과를 갱신(UPDATE)하려 할 때, 5줄 중 하나라도 수정을 빠뜨리면 "어떤 줄에선 철수가 컴퓨터과고, 어떤 줄에선 수학과네?"라는 데이터 모순(갱신 이상)이 폭발합니다.
➔ 해결책 (2NF): 부분 종속된 쓰레기들(학번, 이름, 학과)을 짐 싸서 내보낸 뒤, 아예 새로운 독립된 **[학생 테이블]**을 만들어주는 수술을 해야 완벽히 치료됩니다.
📢 섹션 요약 비유: 부분 종속은 합창단(테이블)의 **'얌체 솔로 가수'**입니다. 정상적인 단원(성적)은 지휘자 두 명(학번, 과목코드)의 손짓이 모두 맞아야만 노래를 부르는데, 얌체 단원(이름, 학과)은 지휘자 한 명(학번)의 손만 보고도 눈치 없이 혼자 자기 노래를 불러버립니다. 옥에 티를 만드는 이 얌체들을 쫓아내어 별도의 솔로 무대(새 테이블)를 만들어주는 것이 정규화입니다.