sqld

정규화의 개념

자격증원톱 2026. 2. 20. 16:30
반응형

정규화의 개념

반응형

1) 정규화란?

  • 데이터베이스 설계에서 중복을 줄이고, 데이터 구조를 규칙적으로(체계적으로) 쪼개는 과정입니다.
  • 목표는 한 가지입니다:
    입력/수정/삭제할 때 데이터가 꼬이는 문제(이상 현상)를 없애는 것

2) 왜 정규화가 필요하냐?

정규화를 안 하면 보통 3가지 문제가 자주 생깁니다(이상 현상).

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

 

 

반응형