20

정규화, 왜 해야 할까?

Day 1: 같은 주소가 100군데 있어요 - 정규화

학습 목표

데이터 이상(Anomaly) 개념을 이해한다 정규화의 목적과 효과를 파악한다

정규화란?

정규화 (Normalization) = 데이터 중복을 줄이고, 무결성을 보장하는 테이블 설계 기법

쉽게 말해: 같은 정보를 여러 곳에 저장하지 않는 것


비정규화 테이블의 3가지 문제

비정규화된 테이블을 보자:

에디터 로딩 중...

문제 1: 삽입 이상 (Insertion Anomaly)

"새 부서 '기획팀'을 만들고 싶어요. 근데 아직 직원이 없어요."

에디터 로딩 중...

직원 없이는 부서 정보를 저장할 수 없다.


문제 2: 갱신 이상 (Update Anomaly)

"개발팀 전화번호가 02-1111로 바뀌었어요."

에디터 로딩 중...

중복 데이터 중 일부만 수정되면 불일치 발생.


문제 3: 삭제 이상 (Deletion Anomaly)

"박민수가 퇴사했어요. 삭제해주세요."

에디터 로딩 중...

잠깐... 마케팅팀의 유일한 직원이었는데? 마케팅팀 정보(전화번호)도 같이 사라졌다!


정규화 전후 비교

Before (비정규화)

에디터 로딩 중...

After (정규화)

에디터 로딩 중...
이슈BeforeAfter
부서 단독 저장불가능가능
부서 정보 수정여러 행한 행
직원 삭제 시부서도 삭제부서 유지

정규화의 효과

  1. 데이터 무결성: 불일치 방지
  2. 저장 공간 절약: 중복 제거
  3. 유지보수 용이: 한 곳만 수정
  4. 확장성: 새 데이터 추가 쉬움

정규화의 단점

"정규화가 무조건 좋은 건 아니에요"

  • JOIN 증가: 테이블이 분리되면 JOIN이 필요
  • 쿼리 복잡도: 간단한 조회도 JOIN 필요
  • 성능 저하: JOIN 많으면 느려질 수 있음

실무에서는 3NF까지 정규화 후, 필요한 곳만 비정규화 (이건 내일 배울 Star Schema에서 다룬다)