정처기 감자
데이터베이스물리DB 설계

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

데이터베이스 정규화와 반정규화

DB물리DB 설계정규화
읽는데 11분 소요
처음 쓰여진 날: 2025-09-21
마지막 수정일: 2025-09-22
조회수: —
선수학습(2개)
  • 데이터베이스 함수 종속성(Functional Dependency)
  • 데이터베이스 이상 현상(Anomaly)

요약

정보처리기사 시험의 핵심 개념인 데이터베이스 정규화(Normalization)의 모든 것을 알아봅니다. 1NF부터 5NF까지 각 정규형의 개념과 조건, 그리고 반정규화의 개념까지 예제와 함께 쉽게 설명하고 실기 대비 문제로 마무리합니다.

데이터베이스 정규화란?

정규화(Normalization) 는 관계형 데이터베이스에서 데이터의 중복을 최소화하고, 데이터 무결성을 보장하기 위해 테이블 구조를 체계적으로 분해하는 과정입니다. 정규화를 통해 이상 현상(Anomaly)을 방지하고, 데이터 구조의 안정성과 유지보수성을 향상시킬 수 있습니다.

정규화는 정리 정돈과 비슷합니다.
정규화는 정리 정돈과 비슷합니다.

정규화 단계 요약

정규형핵심 조건제거 대상
1NF (제1정규형)모든 속성 값은 원자값(Atomic Value) 이어야 한다.다중값 속성
2NF (제2정규형)1NF를 만족하고, 부분 함수 종속을 제거해야 한다. (완전 함수 종속)부분 함수 종속
3NF (제3정규형)2NF를 만족하고, 이행 함수 종속을 제거해야 한다.이행 함수 종속
BCNF (보이스-코드 정규형)3NF를 만족하고, 모든 결정자가 후보키여야 한다.후보키가 아닌 결정자
4NF (제4정규형)BCNF를 만족하고, 다치 종속(Multi-valued Dependency) 을 제거해야 한다.다치 종속
5NF (제5정규형)4NF를 만족하고, 조인 종속(Join Dependency) 이 후보키를 통해서만 성립되어야 한다.조인 종속

제1정규형 (1NF)

제1정규형은 릴레이션의 모든 속성 값이 원자값(Atomic Value) 으로만 구성되어야 한다는 규칙입니다. 즉, 하나의 속성 값에 여러 개의 값이 들어갈 수 없습니다.

  • 예시: 학생이 수강하는 과목을 저장할 때, 수강과목 속성에 '자료구조, 알고리즘'과 같이 여러 값을 넣으면 1NF를 위반합니다.
[정규화 전]
학번이름수강과목
1001김철수자료구조, 알고리즘
1002이영희운영체제
↓↓↓[1NF 정규화 후]↓↓↓
학번이름수강과목
1001김철수자료구조
1001김철수알고리즘
1002이영희운영체제

제2정규형 (2NF)

제2정규형은 릴레이션이 1NF를 만족하고, 부분 함수 종속(Partial Functional Dependency) 을 모두 제거한 상태여야 합니다. 즉, 모든 속성이 기본키 전체에 완전 함수 종속 되어야 합니다. (기본키가 단일 속성이면 항상 2NF를 만족합니다.)

  • 예시: (학번, 과목코드)를 기본키로 사용하는 수강 릴레이션에서, 성적은 (학번, 과목코드) 모두에 종속되지만, 교수명은 과목코드에만 종속(부분 함수 종속)됩니다.
[정규화 전] (기본키: 학번, 과목코드)
학번과목코드교수명성적
1001CS101김교수A+
1001CS202이교수A0
1002CS101김교수B+
↓↓↓[2NF 정규화 후]↓↓↓
[수강 테이블]
학번과목코드성적
1001CS101A+
1001CS202A0
1002CS101B+
[과목 테이블]
과목코드교수명
CS101김교수
CS202이교수

제3정규형 (3NF)

제3정규형은 2NF를 만족한 뒤, 키가 아닌 컬럼끼리 이어서 값을 결정하는 구조를 제거한 상태입니다.

쉽게 말하면, 기본키가 아닌 컬럼끼리 서로 답을 알려주면 3NF에서 문제가 됩니다. 예를 들어 학번은 학생 한 명을 찾는 키입니다. 그런데 학과명을 알기 위해 학번에서 바로 찾는 게 아니라, 먼저 학과코드를 찾고 그 학과코드가 다시 학과명을 알려준다면 중간 단계가 생깁니다.

학번 → 학과코드 → 학과명

이처럼 키가 아닌 학과코드가 또 다른 키가 아닌 학과명을 결정하면 이행 함수 종속입니다. 3NF에서는 이런 중간 결정 구조를 테이블 분리로 제거합니다.

학번이 학과코드를 거쳐 학과명을 결정하는 이행 함수 종속
중간 컬럼이 답을 대신 알려주면 3NF 위반
  • 예시: 아래 테이블에서 후보키는 학번입니다. 학번만으로 각 행을 유일하게 식별할 수 있습니다.
    • 학번 → 학과코드: 학번이 정해지면 학과코드가 결정됩니다.
    • 학과코드 → 학과명: 학과코드가 정해지면 학과명이 결정됩니다.
    • 즉, 학번 → 학과코드 → 학과명 이행 함수 종속이 존재하며, 학과코드와 학과명은 모두 어떤 후보키에도 포함되지 않는 속성이므로 3NF를 위반합니다.
[정규화 전] (후보키: 학번)
학번이름학과코드학과명
1001김철수CS컴퓨터과학
1002이영희EE전자공학
1003김철수CS컴퓨터과학
1004김철수EE전자공학
↓↓↓[3NF 정규화 후]↓↓↓
[학생 테이블]
학번이름학과코드
1001김철수CS
1002이영희EE
1003김철수CS
1004김철수EE
[학과 테이블]
학과코드학과명
CS컴퓨터과학
EE전자공학

이행 함수 종속처럼 보이지만 3NF를 만족하는 경우

A → B → C 형태가 있더라도, B나 C가 어떤 후보키의 구성원이면 이행 함수 종속이 아닙니다. 이행 함수 종속은 B와 C가 모두 후보키가 아닌 속성일 때만 성립하기 때문입니다.

예를 들어, 대학교 강의 시간표를 관리하는 테이블을 가정해 보겠습니다. 각 수업은 한 교수가 담당하고, 각 교수는 지정된 강의실에서만 수업하며, 같은 시간대에 같은 강의실에서 두 수업이 진행될 수 없습니다.

수업교수강의실시간대
데이터베이스김교수A101월 1교시
데이터베이스김교수A101수 2교시
네트워크이교수B202월 1교시
알고리즘김교수A101화 3교시
  • 후보키: {수업, 시간대}, {강의실, 시간대}, {교수, 시간대}
  • 수업 → 교수: 수업이 정해지면 교수가 결정됩니다.
  • 교수 → 강의실: 교수가 정해지면 강의실이 결정됩니다.
  • 얼핏 수업 → 교수 → 강의실 이행 함수 종속처럼 보입니다.
  • 하지만 교수는 후보키 {교수, 시간대}의 구성원, 강의실은 후보키 {강의실, 시간대}의 구성원이므로, 둘 다 주요 속성(후보키를 구성하는 속성) 입니다. → 이행 함수 종속이 아님 → 3NF 만족
  • 단, BCNF는 위반합니다. 수업, 교수는 결정자이지만 후보키가 아니기 때문입니다.

BCNF (Boyce-Codd Normal Form)

BCNF는 3NF보다 강력한 정규형으로, 릴레이션의 모든 결정자가 후보키(Candidate Key) 1 여야 한다는 규칙입니다. 3NF의 이상 현상을 대부분 해결하지만, 드물게 발생하는 특정 유형의 이상을 해결하기 위해 BCNF가 필요합니다.

수업교수강의실시간대
데이터베이스김교수A101월 1교시
데이터베이스김교수A101수 2교시
네트워크이교수B202월 1교시
알고리즘김교수A101화 3교시

위 테이블은 3NF는 만족하지만, 수업 → 교수, 교수 → 강의실에서 수업과 교수가 결정자이면서 후보키가 아니므로 BCNF를 위반합니다.

[이상 현상 발생]

  • 갱신 이상: 만약 '김교수'의 강의실이 'A101'에서 'C303'으로 바뀐다면, '김교수'가 포함된 모든 행을 찾아 수정해야 합니다. 하나라도 누락하면 데이터 불일치가 발생합니다.

[BCNF 정규화]

문제가 되는 함수 종속(수업 → 교수, 교수 → 강의실)을 기준으로 테이블을 분해하여 BCNF를 만족시킵니다.

[교수-강의실 테이블] (후보키: 교수)

교수강의실
김교수A101
이교수B202

교수 → 강의실에서 교수가 후보키이므로 BCNF를 만족합니다.

[수업-교수 테이블] (후보키: 수업)

수업교수
데이터베이스김교수
네트워크이교수
알고리즘김교수

수업 → 교수에서 수업이 후보키이므로 BCNF를 만족합니다.

[수업-시간대 테이블] (후보키: {수업, 시간대})

수업시간대
데이터베이스월 1교시
데이터베이스수 2교시
네트워크월 1교시
알고리즘화 3교시

후보키가 아닌 결정자가 없으므로 BCNF를 만족합니다.

이렇게 분해하면 데이터 중복이 사라져 이상 현상을 해결할 수 있고, 각 테이블이 하나의 명확한 주제(교수-강의실, 수업-교수, 수업-시간대)를 갖게 되어 구조가 더 안정적이고 관리하기 쉬워집니다.


제4정규형 (4NF) & 제5정규형 (5NF)

4NF와 5NF는 실무에서 거의 다루지 않지만, 개념은 알아두는 것이 좋습니다.

  • 제4정규형 (4NF): 다치 종속(Multi-valued Dependency, MVD) 을 제거한 정규형입니다. 1:N 관계에서 발생하는 종속성입니다.
  • 제5정규형 (5NF): 조인 종속(Join Dependency, JD) 이 후보키를 통해서만 성립되어야 하는 정규형입니다.

반정규화 (Denormalization)

정리를 너무하면 피곤해요. 반정규화는 정리를 조금 푼다고 생각하세요.
정리를 너무하면 피곤해요. 반정규화는 정리를 조금 푼다고 생각하세요.
반정규화는 정규화의 반대개념이 아니에요. 정리를 조금 푼다고 생각하세요.(정규화의 반대개념은 비정규화!)

반정규화는 정규화된 테이블 구조를 의도적으로 통합하거나 중복을 허용하여 데이터베이스의 성능을 향상시키는 과정입니다. 과도한 조인(JOIN)으로 인해 발생하는 성능 저하를 막기 위해 사용되지만, 데이터 일관성이 깨질 위험이 있으므로 신중하게 적용해야 합니다.

  • 주요 기법: 테이블 통합, 테이블 분할(수평/수직), 중복 속성 추가 등

정보처리기사 실기 대비 문제


Footnotes

  1. 후보키(Candidate Key)는 릴레이션(테이블)에서 각 튜플(행)을 유일하게 식별할 수 있는 최소한의 속성(열)들의 집합입니다. 하나의 릴레이션에는 여러 개의 후보키가 존재할 수 있으며, 이 중 하나를 선택하여 기본키(Primary Key) 로 사용합니다. 나머지 후보키는 대체키(Alternate Key) 라고 부릅니다. 참고 ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

추천 개념

Beta

관련 글

(14개)
제목태그업데이트시험
데이터베이스 이상 현상(Anomaly)
정규화DB물리DB 설계정규화
2026-04-15-
데이터베이스 함수 종속성(Functional Dependency)
정규화DB물리DB 설계정규화
2025-10-18-
데이터베이스 파일 구조 - 순차, 인덱스, 해싱 접근 방식
파일 구조DB물리DB 설계파일 구조
2025-10-22-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 1회 이론 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999