현재 선택한 데이터 아키텍처 과정

DAsP 이론 학습

이론 목록으로 돌아가기

정규화와 함수 종속

정규화는 함수 종속을 근거로 중복과 삽입·수정·삭제 이상을 제거하는 논리 설계 과정입니다. 후보키와 결정자를 먼저 식별하고 1NF·2NF·3NF·BCNF를 판단한 뒤, 분해 결과의 무손실 조인과 종속성 보존을 검토해야 합니다.

예상 읽기 7

핵심 요약

함수 종속 X → Y는 동일한 X값이면 Y값도 반드시 동일하다는 업무 규칙이다. 정규화는 테이블을 작게 나누는 작업이 아니라 후보키·결정자·종속 관계를 올바른 엔터티에 배치하는 작업이다. 1NF는 반복·다중값을 제거하고, 2NF는 복합 후보키의 부분 종속을 제거하며, 3NF는 비키 속성 사이의 이행 종속을 제거한다. BCNF는 모든 비자명 함수 종속의 결정자가 슈퍼키가 되도록 요구한다.

학습 목표

  • 삽입·수정·삭제 이상과 함수 종속의 관계를 설명한다.
  • 후보키, 결정자, 완전·부분·이행 종속을 구분한다.
  • 함수 종속 집합으로 1NF·2NF·3NF·BCNF를 판정하고 분해한다.
  • 분해 후 무손실 조인과 종속성 보존의 의미를 설명한다.

1. 개념 설명

1.1 이상 현상

한 릴레이션에 서로 다른 사실이 중복 저장되면 다음 이상이 발생한다.

이상설명예시
삽입 이상다른 사실이 없으면 필요한 사실을 등록할 수 없음주문이 없는 상품을 상품명·단가와 함께 등록하지 못함
수정 이상동일 사실이 여러 행에 있어 모두 수정하지 않으면 불일치고객명이 주문라인마다 반복되어 일부만 변경됨
삭제 이상한 사실을 삭제하면서 다른 필요한 사실까지 소실마지막 주문라인 삭제로 상품 정보까지 사라짐

이상은 단순 중복 행이 아니라 서로 다른 함수 종속이 한 구조에 혼재할 때 발생한다.

1.2 함수 종속과 결정자

X → Y에서 X는 결정자, Y는 종속자다. 함수 종속은 현재 데이터 우연이 아니라 업무 규칙으로 판단한다.

  • 고객번호 → 고객명: 고객번호가 같으면 고객명은 하나로 결정
  • (주문번호, 라인순번) → 상품번호, 수량: 주문라인 식별자가 라인 속성을 결정
  • 상품번호 → 상품명, 기준단가: 상품번호가 상품 정보를 결정

한 데이터 샘플에서 우연히 부서명이 유일하더라도 “부서명은 영구적으로 유일하다”는 업무 규칙이 없다면 부서명 → 부서번호를 선언할 수 없다.

1.3 후보키와 종속 유형

  • 후보키: 릴레이션의 모든 속성을 유일하게 결정하는 최소 속성 집합
  • 슈퍼키: 모든 속성을 결정하지만 최소일 필요는 없는 집합
  • 완전 함수 종속: Y가 X 전체에는 종속되지만 X의 진부분집합에는 종속되지 않음
  • 부분 함수 종속: 복합 후보키의 일부만으로 일반 속성이 결정됨
  • 이행 함수 종속: 키 X가 비키 속성 Y를 결정하고 Y가 다시 비키 속성 Z를 결정함

2NF의 부분 종속은 복합 후보키가 있을 때 발생한다. 단일 속성 후보키만 있는 릴레이션은 1NF를 만족하면 자동으로 2NF다.

1.4 정규형 판정

정규형핵심 조건대표 위반
1NF각 튜플·속성 교차점에 도메인의 단일값전화번호 목록, 상품1·상품2 반복 그룹
2NF1NF이며 모든 비주요 속성이 각 후보키에 완전 종속(주문번호, 상품번호) 중 주문번호만으로 주문일자 결정
3NF2NF이며 비주요 속성이 후보키에 이행 종속되지 않음고객번호→우편번호→지역명
BCNF모든 비자명 FD X→Y에서 X가 슈퍼키후보키가 겹치는 특수 구조에서 비키 결정자 존재

3NF의 형식적 조건은 비자명 FD X→A마다 X가 슈퍼키이거나 A가 주요 속성(어떤 후보키의 구성 속성)인 것이다. BCNF는 두 번째 예외를 허용하지 않아 3NF보다 강하다.

1.5 무손실 조인과 종속성 보존

분해된 릴레이션을 자연 조인했을 때 원래의 유효한 튜플만 정확히 복원되어야 무손실 조인 분해다. 조인 결과에 가짜 튜플이 생기면 손실 분해다.

종속성 보존은 원래 함수 종속을 분해된 각 릴레이션의 제약만 검사해 보장할 수 있는 성질이다. BCNF 분해는 무손실을 달성할 수 있지만 모든 종속성을 보존하지 못할 수 있다. 시험에서는 “더 높은 정규형이면 항상 모든 설계 성질이 자동으로 좋아진다”는 식의 선지를 경계한다.

1.6 4NF·5NF 심화 경계

  • 4NF는 서로 독립적인 다중값 사실에서 발생하는 다치 종속을 다룬다.
  • 5NF는 여러 릴레이션의 결합으로만 표현되는 조인 종속을 다룬다.

이 단원에서는 개념 경계만 익히고, 기본 판정과 문제 풀이의 중심은 함수 종속에 기반한 1NF·2NF·3NF·BCNF로 둔다. 4NF·5NF는 공개된 현재 자격 안내에서 세부 출제 수준을 확인하기 어려우므로 고급 관계형 이론 참고로 구분한다.

2. 실제 함수 종속 집합

다음 주문상세 릴레이션을 보자.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
주문상세(
  주문번호, 상품번호, 주문일자, 고객번호, 고객명,
  상품명, 기준단가, 주문수량
)

업무 규칙과 함수 종속은 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
후보키: (주문번호, 상품번호)

주문번호 → 주문일자, 고객번호
고객번호 → 고객명
상품번호 → 상품명, 기준단가
(주문번호, 상품번호) → 주문수량
  • 주문일자·고객번호는 후보키 일부인 주문번호에만 종속하므로 부분 종속이다.
  • 상품명·기준단가는 상품번호에만 종속하므로 부분 종속이다.
  • 고객명은 주문번호→고객번호→고객명으로 이행 종속된다.

3. 정규화 절차

3.1 1NF 확인

각 속성에 단일값이 들어가고 반복 그룹이 없다고 가정한다.

3.2 2NF 분해

부분 종속을 분리한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
주문(주문번호, 주문일자, 고객번호, 고객명)
상품(상품번호, 상품명, 기준단가)
주문라인(주문번호, 상품번호, 주문수량)

3.3 3NF 분해

고객번호 → 고객명 이행 종속을 분리한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
고객(고객번호, 고객명)
주문(주문번호, 주문일자, 고객번호)
상품(상품번호, 상품명, 기준단가)
주문라인(주문번호, 상품번호, 주문수량)

3.4 분해 검증

  • 각 릴레이션의 후보키를 다시 확인한다.
  • 원래 종속이 어디에서 강제되는지 확인한다.
  • 주문과 주문라인은 주문번호로, 상품과 주문라인은 상품번호로 무손실 결합되는지 확인한다.
  • 업무 시나리오에서 상품만 등록, 주문만 생성, 주문 삭제 후 고객·상품 유지가 가능한지 확인한다.

4. BCNF 판정 사례

릴레이션 수강(학생, 과목, 교수)에 다음 규칙이 있다고 하자.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
(학생, 과목) → 교수
교수 → 과목

후보키는 (학생, 과목)(학생, 교수)가 될 수 있다. 교수 → 과목에서 교수는 슈퍼키가 아니므로 BCNF를 위반한다. 그러나 과목은 후보키의 구성 속성인 주요 속성이므로 3NF 조건은 만족할 수 있다. 이 사례는 3NF와 BCNF가 항상 같지 않음을 보여준다.

BCNF로 분해하면 다음과 같이 생각할 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
교수과목(교수, 과목)
학생교수(학생, 교수)

이 분해가 업무 의미를 정확히 표현하는지, 원래 종속과 허용 조합을 보존하는지 추가 검증해야 한다.

5. 비교와 구분

구분기준오답 함정
데이터 중복 vs 정규화 위반중복의 원인이 함수 종속 혼재인지모든 중복값을 정규화 위반으로 판단
부분 종속 vs 이행 종속키의 일부가 결정자인지, 비키 속성이 중간 결정자인지복합키 여부를 확인하지 않음
3NF vs BCNF결정자가 슈퍼키인지, 종속자가 주요 속성인지3NF와 BCNF를 동일시
무손실 조인 vs 종속성 보존데이터 복원 성질 vs 제약 검사 위치둘이 항상 동시에 만족한다고 가정
정규화 vs 반정규화논리적 종속 정리 vs 근거 있는 성능 중복조회 편의만으로 정규화 생략

시험 판단 포인트

  • 함수 종속은 샘플 데이터가 아니라 업무 규칙으로 식별한다.
  • 2NF 위반은 복합 후보키의 일부에 종속되는 비주요 속성이 있을 때 발생한다.
  • 3NF는 비키 속성 간 이행 종속을 제거하는 설명으로 자주 출제되지만, 후보키가 여러 개인 경우 형식 조건도 확인한다.
  • BCNF는 모든 결정자가 슈퍼키여야 하며 3NF보다 강하다.
  • 분해 후에는 정규형만 보지 말고 무손실 조인과 종속성 보존을 구분해 검증한다.

자주 틀리는 부분

  • 컬럼 수가 많다는 이유만으로 테이블을 분해한다. 함수 종속 근거가 먼저다.
  • 단일키 릴레이션에서 부분 종속을 찾으려 한다.
  • 외래키가 있으면 정규화가 끝났다고 판단한다. 외래키는 참조 구현 수단이지 정규형 증명이 아니다.
  • 조회 시 조인이 늘어난다는 이유로 정규화를 생략한다. 성능 문제는 정규 구조를 기준선으로 측정한 뒤 반정규화를 판단한다.
  • BCNF 분해가 항상 종속성 보존까지 보장한다고 단정한다.
스스로 확인하기

개념 확인 문제

문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.

01객관식 릴레이션 R(주문번호, 상품번호, 주문일자, 수량)의 후보키가 (주문번호, 상품번호)이고 주문번호 → 주문일자가 성립한다. 가장 정확한 설명은? A. 주문일자는 후보키 전체에 완전 종속한다. B. 주문일자는 후보키 일부에 종속하므로 2NF 위반 원인이 된다. C. 주문일자는 다치 종속이므로 4NF 위반이다. D. 후보키가 있으므로 모든 정규형을 만족한다.
정답 및 해설

주문번호에만 종속되는 주문일자·고객번호를 주문으로 분리한다.

02객관식 다음 중 무손실 조인 분해에 대한 설명으로 옳은 것은? A. 분해된 릴레이션을 조인하면 원래 릴레이션의 유효한 정보가 정확히 복원된다. B. 모든 함수 종속을 각 릴레이션에서 개별 검사할 수 있다는 뜻이다. C. BCNF 분해이면 자동으로 종속성 보존도 만족한다. D. 조인을 수행하지 않아도 모든 조회가 가능하다는 뜻이다.
정답 및 해설

상품번호에만 종속되는 상품명·기준단가를 상품으로 분리한다.

03연결형 다음 현상을 정규형과 연결하시오. 1) 한 컬럼에 여러 전화번호를 쉼표로 저장 2) (학생번호, 과목번호) 중 과목번호만으로 과목명이 결정 3) 사원번호→부서번호, 부서번호→부서명 4) 비자명 함수 종속의 결정자가 슈퍼키가 아님 가) 1NF 위반 나) 2NF 위반 다) 3NF 위반 라) BCNF 위반
정답 및 해설

고객번호를 통해 결정되는 고객명을 고객으로 분리한다.

04정규화 설계 다음 함수 종속을 사용해 주문상세를 3NF까지 분해하고 각 릴레이션의 키를 표시하시오. text 후보키: (주문번호, 상품번호) 주문번호 → 주문일자, 고객번호 고객번호 → 고객명 상품번호 → 상품명, 기준단가 (주문번호, 상품번호) → 주문수량
정답 및 해설

주문라인에는 복합키 전체에 완전 종속하는 주문수량을 둔다.

05사례 판단 수강(학생, 과목, 교수)에서 (학생, 과목)→교수, 교수→과목이 성립한다. 교수는 슈퍼키가 아니다. 이 릴레이션이 3NF일 수 있으면서 BCNF를 위반하는 이유를 설명하시오.
정답 및 해설

모범 답안

후보키는 (학생, 과목)뿐 아니라 (학생, 교수)도 될 수 있다. 교수→과목에서 결정자 교수는 슈퍼키가 아니므로 BCNF 조건을 위반한다. 그러나 종속자인 과목은 후보키 (학생, 과목)의 구성 속성, 즉 주요 속성이므로 3NF의 형식 조건은 만족할 수 있다. 따라서 이 구조는 3NF이지만 BCNF가 아닌 사례가 된다. BCNF 분해 시 교수과목(교수, 과목)학생교수(학생, 교수)를 검토하되 무손실과 업무 의미를 확인해야 한다.