본문으로 바로가기

데이터베이스 정규화 2NF·3NF·BCNF: 함수 종속과 후보키로 구분하기

부분 종속·이행 종속·슈퍼키 조건을 구분하고, 수강 테이블을 분해하는 예시로 2NF·3NF·BCNF의 차이를 확인해요.

2NF는 비주요 속성의 부분 함수 종속을 없애고, 3NF는 비주요 속성의 이행 종속 문제까지 다뤄요. BCNF는 모든 비자명 함수 종속의 결정자가 슈퍼키여야 해요. 정규형 이름부터 외우기보다 후보키와 함수 종속을 먼저 적으면 구분할 수 있어요.

먼저 네 가지 용어를 확인해요

용어뜻주의할 점
함수 종속 X → AX 값이 같으면 A 값도 같아야 한다는 제약현재 표에서 우연히 같은 것과 업무상 제약을 구분해요
슈퍼키릴레이션의 모든 속성을 결정하는 속성 집합필요 없는 속성을 더 포함할 수도 있어요
후보키더 줄이면 슈퍼키가 되지 않는 최소 슈퍼키여러 개 있을 수 있고, 기본키는 그중 선택한 하나예요
주요 속성·비주요 속성후보키 하나 이상에 속하는 속성·어느 후보키에도 속하지 않는 속성기본키에 없다는 이유만으로 비주요 속성은 아니에요

X → A에서 A가 이미 X에 포함되면 자명한 종속이에요. BCNF·3NF의 판정에서는 이런 자명한 종속을 위반으로 세지 않아요.

정규형을 비교해요

단계판정 기준흔히 찾는 위반 단서
1NF각 속성값이 해당 도메인에서 원자값한 칸에 반복 목록을 넣음
2NF1NF이며 모든 비주요 속성이 모든 후보키에 완전 함수 종속복합 후보키의 일부만으로 비주요 속성이 결정됨
3NF모든 비자명 X → A에서 X가 슈퍼키이거나 A가 주요 속성일반적인 단일 후보키 예시에서는 비키 속성을 거치는 이행 종속
BCNF모든 비자명 X → A에서 X가 슈퍼키슈퍼키가 아닌 속성 집합이 다른 속성을 결정함

3NF의 ‘이행 종속 제거’는 기본 예제를 푸는 데 유용한 요약이에요. 여러 후보키가 겹치는 경우에는 표의 정확한 정의로 판정해야 해요. BCNF이면 3NF이지만, 3NF이라고 반드시 BCNF인 것은 아니에요.

수강 테이블을 2NF와 3NF로 나눠 봐요

다음 표는 설명을 위해 새로 만든 예시이며 기출 자료가 아니에요. 한 학생은 한 학과에 속하고, 학과마다 사무실이 하나이며, 한 학생의 같은 과목 수강은 한 행만 기록한다고 가정해요.

학번과목코드학생명학과학과사무실점수
S1C1민서전산30180
S1C2민서전산30190
S2C1준호전산30185

업무 규칙으로 주어진 함수 종속은 다음과 같아요. 예시 행만 보고 추가 종속을 추측하지 않아요.

  • (학번, 과목코드) → 점수
  • 학번 → 학생명, 학과
  • 학과 → 학과사무실

후보키는 (학번, 과목코드)예요. 학생명·학과·학과사무실은 학번만으로 결정되므로 키의 일부에 종속되어 2NF를 위반해요. 먼저 수강과 학생으로 분리해요.

단계테이블과 후보키해소한 문제
2NF 분해수강(학번, 과목코드, 점수), 후보키 (학번, 과목코드)점수만 복합키 전체에 종속되어 남아요
2NF 분해학생(학번, 학생명, 학과, 학과사무실), 후보키 학번학생 정보의 부분 종속을 수강에서 분리해요
3NF 분해학생(학번, 학생명, 학과), 후보키 학번학번 → 학과 → 학과사무실의 이행 종속을 분리해요
3NF 분해학과(학과, 학과사무실), 후보키 학과학과사무실을 해당 학과에서 한 번 관리해요

이 가정에서는 최종 수강·학생·학과 테이블 모두 BCNF도 만족해요. 분해 전에는 학과 사무실을 옮길 때 여러 수강 행을 함께 고쳐야 했지만, 분해 후에는 학과 테이블의 해당 행에서 관리할 수 있어요. 이것이 중복 때문에 생기는 수정 이상을 줄이는 예예요.

3NF이지만 BCNF는 아닌 경우

새 예시로 지도(학생, 과목, 강사)를 생각해요. 다음 두 종속만을 업무 제약으로 가정해요.

  • (학생, 과목) → 강사: 학생은 같은 과목에서 강사 한 명에게 배워요.
  • 강사 → 과목: 한 강사는 한 과목만 맡아요.

후보키는 (학생, 과목)과 (학생, 강사)예요. 모든 속성이 적어도 하나의 후보키에 속하므로 주요 속성이에요. 강사 → 과목에서 강사는 학생을 결정하지 못하므로 슈퍼키가 아니에요. 하지만 우변인 과목은 주요 속성이므로 3NF는 허용하고 BCNF는 허용하지 않아요.

강사·과목 테이블과 학생·강사 테이블로 분해하면 이 예시의 BCNF 위반을 해소할 수 있어요. 다만 원래의 (학생, 과목) → 강사 제약을 각 테이블의 제약만으로 검사할 수 있는지는 별도 문제예요. 무손실 분해와 종속성 보존을 함께 확인해야 하며, 정규화는 무조건 열을 잘게 나누는 작업이 아니에요.

기출의 ‘모든 결정자가 후보키’는 어떻게 읽나요?

시험에서는 BCNF를 ‘모든 결정자가 후보키인 정규형’이라고 줄여 표현하기도 해요. 엄밀한 정의는 모든 비자명 함수 종속의 결정자가 슈퍼키라는 조건이에요. 후보키에 불필요한 속성을 더한 집합도 슈퍼키가 될 수 있으므로, 후보키와 슈퍼키를 같은 말로 외우면 안 돼요.

정보처리기사 2021년 2회 59번은 3NF에서 BCNF로 가는 조건을 묻고 저장된 정답은 ①이에요. 2022년 2회 40번도 결정자의 키 조건이 결정적 단서이며 저장된 정답은 ① BCNF예요. 다른 보기의 부분 종속·이행 종속·원자값 조건이 어느 단계에 해당하는지 비교해 보세요.

확인일은 2026년 10월 29일이에요. Microsoft 문서는 기본 정규화 예시를, Berkeley CS186과 Database System Concepts 자료는 키·3NF·BCNF의 엄밀한 정의를 확인하는 데 사용했어요. BCNF와 4NF는 서로 다른 정규형이에요.

개념 확인 자료

기출에서 확인해 보세요

수록된 실제 문항으로 이동해 직접 답을 골라보세요.