정보처리기사 · SQL 6분 읽기

데이터베이스 정규화: 1NF·2NF·3NF·BCNF와 함수 종속

부분 함수 종속, 이행적 함수 종속, 후보키가 아닌 결정자는 각각 어느 단계에서 분해할까요? 작은 수강 테이블 하나로 1NF부터 BCNF까지 비교합니다.

이 글에서 익힐 것테이블의 키와 함수 종속 관계를 보고 현재 정규형과 다음 분해 단계를 정확히 판별하기개념 설명 → 핵심 용어

DB 설계·정규화 카드 10장

핵심 짚어보기

정규화를 하는 이유: 삽입·삭제·갱신 이상(Anomaly) 방지

한 테이블에 학생 정보(학번, 이름, 학과명, 학과전화)와 수강 정보(과목코드, 성적)를 한꺼번에 넣어 두면 세 가지 이상 현상이 생깁니다. 과목을 아직 신청하지 않은 신입생은 과목코드(기본키 일부)가 NULL이어서 등록할 수 없고(삽입 이상), 마지막 수강 과목을 취소하면 학생 소속 정보까지 사라지며(삭제 이상), 학과 전화번호가 바뀌면 그 학과 학생의 모든 행을 일일이 찾아 고쳐야 합니다(갱신 이상).

정규화는 속성들 사이의 함수적 종속성(Functional Dependency)을 분석해 테이블을 무손실 분해함으로써 데이터 중복과 이상 현상을 없애는 과정입니다. (단, 정규화를 하면 테이블이 나뉘어 조회 시 JOIN이 늘어날 수 있으므로 무조건 조회 속도가 빨라진다고 단정하면 안 됩니다.)

키(Key)의 구분: 슈퍼키(유일성) vs 후보키(유일성+최소성) vs 기본키·대체키

정규화 단계를 따지려면 먼저 후보키(Candidate Key)를 찾아야 합니다. 각 튜플(행)을 유일하게 식별할 수 있는 속성 집합은 모두 슈퍼키(Super Key)가 됩니다. 예를 들어 (학번), (학번, 이름), (학번, 과목코드)는 모두 유일성을 만족하는 슈퍼키일 수 있습니다.

이 중 불필요한 속성을 뺀 최소한의 속성만으로 유일성을 만족하는 키가 후보키(유일성 + 최소성)입니다. 후보키 가운데 대표로 선택한 하나가 기본키(PK, 개체 무결성에 따라 NULL·중복 불가)가 되고, 선택받지 못한 나머지 후보키들은 대체키(Alternate Key)라고 부릅니다.

1NF → 2NF(부분 종속 제거) → 3NF(이행적 종속 제거) → BCNF(결정자 후보키)

제1정규형(1NF)은 모든 속성값이 더 이상 쪼갤 수 없는 원자값(Atomic Value)으로만 이루어진 상태입니다. 제2정규형(2NF)은 복합 기본키(예: 학번 + 과목코드)의 일부(학번)에만 종속되는 속성(학생이름, 학과코드)을 별도 테이블로 분리해 '완전 함수 종속'을 만든 상태입니다. 따라서 기본키가 단일 컬럼인 테이블은 1NF만 만족하면 자동으로 2NF를 만족합니다.

제3정규형(3NF)은 기본키가 아닌 일반 속성 A가 일반 속성 B를 결정하는 '이행적 함수 종속(학번 → 학과코드 → 학과전화)'을 분리한 상태입니다. 보이스-코드 정규형(BCNF)은 3NF를 만족하면서 '모든 결정자가 후보키'가 되도록(후보키가 아닌 속성이 다른 속성을 결정하는 경우까지) 분해한 강한 제3정규형입니다.

4NF·5NF와 반정규화(De-Normalization)

BCNF 이후에도 한 속성에 여러 값이 독립적으로 대응하는 다치 종속(Multi-valued Dependency, A ↠ B)을 제거하면 제4정규형(4NF), 조인 종속(Join Dependency)을 제거하면 제5정규형(5NF)이 됩니다.

반대로 정규화를 마친 뒤 대량 조회 시 과도한 조인으로 성능 저하가 확인될 때, 무결성 관리 비용을 감수하고 의도적으로 파생 컬럼을 추가하거나 테이블을 병합·분할하는 기법을 반정규화(역정규화)라고 합니다.

한눈에 정리

정규화 단계별 제거 대상과 수강 테이블 분해 예시

정규화 단계별 제거 대상과 수강 테이블 분해 예시
정규형핵심 조건 (제거 대상)위반 사례 예시
제1정규형 (1NF)모든 속성이 원자값 (다중값·반복 그룹 제거)한 셀에 전화번호 2개가 쉼표로 함께 저장됨
제2정규형 (2NF)부분 함수 종속 제거 (완전 함수 종속 달성)복합키 (학번, 과목코드)에서 '학생이름'이 '학번'에만 종속
제3정규형 (3NF)이행적 함수 종속 제거 (X→Y, Y→Z일 때 X→Z)학번 → 학과코드 → 학과사무실위치 이어짐
BCNF모든 결정자가 후보키 (후보키 아닌 결정자 제거)(학번, 과목명)이 후보키인데 후보키가 아닌 '담당교수'가 '과목명'을 결정
제4정규형 (4NF)다치 종속(A ↠ B) 제거학생 1명이 여러 자격증과 여러 동아리를 독립적으로 가짐

직접 풀어보기

예제로 확인하기

01함수 종속 다이어그램으로 정규화 단계 찾기

[주문상세] 테이블의 기본키는 (주문번호, 상품코드) 복합키입니다. 함수 종속 관계를 조사했더니 (주문번호, 상품코드) → 주문수량, 상품코드 → 상품명, 상품코드 → 단가 관계가 성립합니다.

현재 이 테이블이 위반하고 있는 정규형은 무엇이며, 어떻게 분해해야 제2정규형(2NF)이 되나요?

정답과 풀이 근거
제2정규형 위반 (부분 함수 종속 존재) → [주문상세(주문번호, 상품코드, 주문수량)]와 [상품(상품코드, 상품명, 단가)]로 분해

복합 기본키의 일부인 '상품코드'만으로 '상품명'과 '단가'가 결정되는 부분 함수 종속이 있으므로, 상품코드에 종속된 속성들을 별도 [상품] 테이블로 분리해야 2NF를 만족합니다.

02단일 기본키 테이블의 정규형 판별하기

단일 컬럼 '사번'을 기본키로 하고 모든 칸에 원자값만 들어 있는 [사원(사번, 이름, 부서코드, 부서명)] 테이블이 있습니다. 여기서 사번 → 부서코드, 부서코드 → 부서명 종속이 존재합니다.

이 테이블은 현재 몇 정규형까지 만족하고 있으며, 다음 단계로 가려면 무엇을 제거해야 하나요?

정답과 풀이 근거
제2정규형(2NF)까지 만족 → 이행적 함수 종속(부서코드 → 부서명)을 제거해 제3정규형(3NF)으로 분해

기본키가 단일 속성(사번)이므로 부분 함수 종속이 없어 1NF와 동시에 2NF를 만족합니다. 일반 속성인 부서코드가 부서명을 결정하는 이행적 함수 종속을 분리하면 3NF가 됩니다.

마지막 점검

스스로 확인하기

답을 떠올린 뒤 해설을 펼쳐 보세요.

1유일성(Uniqueness)은 만족하지만 최소성(Minimality)은 만족하지 않아도 되는 키는?
슈퍼키 (Super Key)

유일성과 최소성을 모두 만족하면 후보키이고, 유일성만 만족하면 슈퍼키입니다.

2외래키(Foreign Key) 값은 반드시 참조하는 부모 테이블의 기본키 값과 일치하거나 NULL이어야 한다는 무결성 제약조건은?
참조 무결성 (Referential Integrity)

기본키가 NULL·중복일 수 없다는 것은 개체 무결성, 외래키 참조 일관성은 참조 무결성입니다.

3후보키가 아닌 속성이 결정자(Determinant) 역할을 하는 함수 종속을 제거하여 달성하는 정규형은?
BCNF (Boyce-Codd Normal Form)

모든 결정자가 후보키가 되도록 분해하는 단계는 BCNF입니다.

4사용자 요구사항을 바탕으로 DBMS에 독립적인 핵심 개체·속성·관계(ERD)를 도출하는 초기 설계 단계는?
개념적 설계 (Conceptual Design)

데이터베이스 설계는 요구조건 분석 → 개념적 설계(ERD) → 논리적 설계(정규화·스키마) → 물리적 설계(인덱스·저장구조) 순으로 진행됩니다.

읽기에서 연습으로

이어서 연습하기

DB 설계·정규화 카드 10장

개념 설명 → 핵심 용어. 본문과 연결된 10개 문항을 순서대로 확인합니다. 카드의 알아요·몰라요는 자기평가이며 같은 뜻의 다른 답도 해설과 비교해 주세요.

DB 설계·정규화 카드 10장 시작

아래는 전체 세트의 첫 10개를 여는 넓은 범위 복습입니다. 위의 선별 연습과 시작 문항이 다를 수 있습니다.

전체 메뉴