sqld
정규화의 개념
자격증원톱
2026. 2. 20. 16:30
반응형
정규화의 개념
반응형

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까지 적용
반응형