💡 핵심 인사이트
이행적 함수적 종속(Transitive Dependency)은 A가 B를 결정하고, B가 다시 C를 결정할 때, 가운데 끼어있는 징검다리(B) 때문에 결과적으로 A가 C를 간접적으로(이행적으로) 결정하게 되는 '꼬리에 꼬리를 무는 삼각관계'의 종속성을 말합니다.
일반 컬럼끼리 권력을 행사하는 이 적폐를 잘라내어 테이블을 찢는 수술이 바로 **제3정규형(3NF)**입니다.
Ⅰ. 이행적 종속의 발생 조건 (A ➔ B ➔ C)
제2정규형까지 통과하여 뚱뚱한 복합키 문제가 해결된 테이블이 있습니다. 기본 키(PK)는 단일 컬럼입니다.
[ 사원 테이블 ]
- 컬럼:
사번(PK), 이름, 부서코드, 부서명, 부서전화번호
[ 종속성 X-Ray 분석 ]
- $X \rightarrow Y$: 테이블의 짱(PK)인
사번을 알면, 그 사원이 소속된부서코드를 알 수 있습니다. (정상 종속). - $Y \rightarrow Z$: 그런데 테이블 뒤쪽에 있는
부서명과부서전화번호는 누구의 눈치를 볼까요? 사번? 아닙니다. 이 녀석들은 일반 컬럼인부서코드에만 맹목적으로 충성합니다. (부서코드가 'HR'이면 무조건 부서명은 '인사팀', 번호는 '02-111'로 하나로 떨어짐). - $X \rightarrow Z$ (이행적 종속의 성립): 결국 1번과 2번이 결합되어, "사번(X)을 알면 ➔ 부서코드(Y)를 거쳐서 ➔ 최종적으로 부서명(Z)이 강제로 결정되는" 간접적인 종속이 탄생합니다.
이처럼 테이블의 짱(기본 키)이 아닌, **'일반 쫄따구 컬럼(부서코드)이 또 다른 쫄따구(부서명)를 지배하는 다단계 하청 구조'**를 이행적 종속이라고 부릅니다.
Ⅱ. 이행적 종속이 일으키는 이상 현상 (Anomaly)
이 꼬리물기를 그대로 두면 테이블에 또 끔찍한 에러가 터집니다.
- 삽입 이상: 회사에 '기획팀(부서코드: PL, 번호: 02-222)'이라는 새로운 부서가 창설되었습니다. 그런데 아직 발령받은 사원이 없습니다. 이 정보를 위 테이블에 넣으려니, PK인
사번이 없어서 NULL 불가 원칙에 걸려 아예 부서 등록 자체가 거부됩니다. - 갱신 이상: 인사팀 부서전화번호가 '02-333'으로 바뀌었습니다. 인사팀 사원이 1,000명이면, 1,000줄의 데이터를 일일이 찾아서 모두 업데이트해야 하며 하나라도 빼먹으면 데이터 모순이 생깁니다.
Ⅲ. 해결책 (제3정규화 3NF)
- 해결의 마법: 중간에서 권력을 행사하며 꼬리를 물었던 하청업자(부서코드)와 그 떨거지들(부서명, 전화번호)을 짐 싸서 내보낸 뒤, 아예 새로운 독립된 **[부서 테이블]**로 독립시켜 줍니다.
- 원래의 [사원 테이블]에는 부서코드 하나만 외래 키(FK)로 덜렁 남겨두어 두 테이블을 우아하게 점선으로 이어주면(조인) 1,000줄을 업데이트할 필요 없이 부서 테이블의 전화번호 단 한 줄만 고치면 완벽해집니다.
📢 섹션 요약 비유: 이행적 종속은 조폭 세계의 **'중간 보스(부서코드)'**입니다. 말단 조직원(부서명)들은 큰형님(사번/기본 키)의 명령을 직통으로 따르지 않고, 중간 보스의 지시에만 충성하며 파벌을 형성합니다(이행적 관계). 큰형님이 파벌의 부작용(이상 현상)을 막으려면, 그 중간 보스와 말단들을 통째로 뜯어내서 별도의 자회사(새 테이블)로 분리 독립시켜 주어야만 조직이 깨끗하게 돌아갑니다.