정규화의 개념
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 20일705
정규화의 개념
1) 정규화란?
- 데이터베이스 설계에서 중복을 줄이고, 데이터 구조를 규칙적으로(체계적으로) 쪼개는 과정입니다.
- 목표는 한 가지입니다:
입력/수정/삭제할 때 데이터가 꼬이는 문제(이상 현상)를 없애는 것
2) 왜 정규화가 필요하냐?
정규화를 안 하면 보통 3가지 문제가 자주 생깁니다(이상 현상).
- 삽입 이상: 새 데이터를 넣고 싶은데 다른 정보가 없어서 못 넣음
- 수정 이상: 같은 정보가 여러 곳에 중복되어 있어서 하나만 고치면 불일치 발생
- 삭제 이상: 어떤 정보를 지우려다 필요 정보까지 같이 사라짐
즉, 정규화는 일관성/무결성을 지키려고 합니다.
3) 예시로 한 번에 이해하기(수강신청 예시)
정규화 안 된 테이블(문제 구조)
수강신청 테이블을 이렇게 만들었다고 해볼게요.
| 학번 | 학생이름 | 과목1 | 과목2 | 과목3 |
| 1001 | 홍길동 | DB | Python |
여기서 문제
- 삽입 이상: 학생은 등록했는데 아직 과목 신청 전이면? 과목 칸이 애매함
- 수정 이상: 홍길동 이름이 바뀌면 여러 행/여러 곳에서 중복 수정 필요
- 삭제 이상: 과목 정보를 지우다 보면 학생 정보까지 의미가 사라질 수 있음
정규화한 구조(정상 구조)
정규화하면 보통 이렇게 쪼갭니다.
학생(Student)
| 학번(PK) | 이름 |
| 1001 | 홍길동 |
과목(Course)
| 과목코드(PK) | 과목명 |
| C01 | DB |
| C02 | Python |
수강신청(Enrollment)
| 신청ID(PK) | 학번(FK) | 과목코드(FK) |
| E1 | 1001 | C01 |
| E2 | 1001 | C02 |
좋아지는 점
- 학생 이름은 학생 테이블 1곳만 고치면 끝(수정 이상 해결)
- 과목은 과목 테이블에 한 번만 정의(중복 감소)
- 신청은 신청 테이블에 행으로 쌓기만 하면 됨(삽입/삭제 안정)
4) 정규형이란?
정규화는 “단계별 규칙”이 있고 그 단계를 정규형(NF)이라고 부릅니다.
- 1NF: 한 칸에 값 1개(반복 컬럼/리스트 금지)
- 2NF: 부분 종속 제거(복합키 일부에만 의존하는 속성 분리)
- 3NF: 이행 종속 제거(키가 아닌 속성에 또 의존하는 속성 분리)
- 더 복잡한 경우 BCNF, 4NF, 5NF까지 확장
(이미지에서는 “주로 1NF~3NF를 많이 쓴다”가 포인트입니다.)
초간단 요약
- 정규화 = 테이블을 잘 쪼개서 중복을 줄이고, 데이터 꼬임(이상 현상)을 막는 설계 방법
- 실무 기본은 보통 1NF~3NF까지 적용
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!