💡 핵심 인사이트
BCNF(Boyce-Codd Normal Form)는 3NF까지 완벽하게 통과한 줄 알았던 테이블에서, **일반 쫄따구 속성이 감히 '기본 키(복합키)의 일부'를 역으로 지배해 버리는 역하극상(모든 결정자가 후보 키가 아님)**이 발견될 때 이를 진압하는 더욱 깐깐한 수술입니다.
**"테이블 내의 모든 결정자(X)는 반드시 후보 키(Candidate Key)여야만 한다!"**는 단 하나의 절대 명제로 요약됩니다.


Ⅰ. 3NF의 구멍과 BCNF 위반 시나리오 (역하극상)

테이블의 기본 키가 복합키일 때, 아주 독특한 상황에서 3NF의 사각지대가 발생합니다.

[ 수강 교수 테이블 (3NF 통과 상태) ]

  • 속성: ( [학번, 과목명](PK), 교수이름 )
  • 업무 규칙:
    1. 학생은 한 과목을 한 명의 교수에게만 듣습니다. ({학번, 과목명} ➔ 교수이름) ➔ 완전 함수 종속 만족 (2NF 패스).
    2. 일반 컬럼인 교수이름 혼자서는 다른 쫄따구를 지배하는 다단계 꼬리물기가 없습니다. ➔ 이행적 종속 없음 (3NF 패스).

[ 문제의 발생 (숨겨진 결정자) ] 그런데 이 대학교에는 특수한 규칙이 하나 더 있습니다. "한 교수는 평생 딱 1개의 과목만 전담해서 가르친다."

  • 이 규칙 때문에, 교수이름을 알면 그 교수가 가르치는 과목명이 무조건 하나로 결정됩니다. (교수이름 ➔ 과목명)
  • 맙소사! 테이블의 짱도 아니고 한낱 일반 속성에 불과한 교수이름(X)이 감히 기본 키 연합의 일원인 과목명(Y)의 값을 역으로 결정(지배)해버리는 하극상이 일어났습니다.
  • 여기서 교수이름은 남의 값을 결정짓는 쎈 놈(결정자)인데, 테이블 전체를 유일하게 식별할 수 있는 자격(후보 키)은 없습니다. 즉, **"후보 키가 아닌 놈이 결정자 노릇을 하는 불법 권력(BCNF 위반)"**이 탄생한 것입니다.

Ⅱ. BCNF 위반이 부르는 이상 현상 (Anomaly)

이 하극상을 내버려 두면 결국 테이블이 또 터집니다.

  • 삽입 이상: 이순신 교수가 새로 부임해서 '인공지능' 과목을 전담하기로 했습니다. 그런데 아직 수강 신청한 학생(학번)이 한 명도 없습니다. PK인 학번이 NULL이 될 수 없어서, 이순신 교수의 전공 배정 정보 자체를 아예 DB에 넣을 수가 없습니다.
  • 갱신 이상: 김철수, 이영희 등 100명이 장보고 교수의 '데이터베이스' 과목을 듣고 있습니다. 테이블에 "장보고 = DB"라는 팩트가 100번이나 중복되어 적혀 있습니다. 장보고 교수가 '네트워크'로 과목을 바꿀 때 한 줄이라도 수정 불일치가 나면 지옥이 열립니다.

Ⅲ. BCNF 수술 집도 (테이블 분리)

치료법은 역시나 원인이 되는 독버섯(불법 권력자)을 뜯어내 새 테이블로 파버리는 것입니다.

수술 후 결과 (BCNF 달성)

1. 교수-과목 테이블 (새로 창업한 독립 테이블)

  • 컬럼: [교수이름](PK), 과목명
  • 조치: 불법 결정자 노릇을 하던 교수이름을 데리고 나가, 아예 합법적인 기본 키(PK) 왕관을 씌워줍니다. 이제 "장보고 = DB"라는 정보는 중복 없이 딱 1줄만 예쁘게 저장됩니다.

2. 학생-수강 테이블 (메인 테이블의 변화)

  • 컬럼: [학번, 교수이름](복합 PK 및 FK)
  • 조치: 메인 테이블에서는 원래 PK였던 과목명을 날려버리고, 새로 독립한 테이블의 짱인 교수이름을 외래 키(FK)로 모셔 와서 기존 학번과 묶어 새로운 PK로 삼습니다. (학번 101은 장보고 교수 수업을 듣는다 ➔ 자동으로 DB 과목임이 연결됨).

📢 섹션 요약 비유: BCNF 위반은 회사 내의 '낙하산 실세(일반 컬럼)'의 하극상입니다. 팀장과 부팀장(복합 PK)이 팀을 이끌어 3NF까지 완벽한 조직을 만들었습니다. 그런데 평사원 김 대리(일반 속성)가 사실 회장님 조카라서, 감히 부팀장(PK의 일부)에게 이래라저래라 명령(결정)을 내리는 촌극이 벌어집니다. 김 대리는 대표 이사(후보 키) 자격증도 없으면서 권력(결정자)을 행사합니다. 사장님(DBA)은 이 개판을 막기 위해 김 대리를 아예 딴 부서로 독립시켜 정식 팀장(PK) 발령을 내버리는 것이 BCNF 정규화입니다.