다섯 살도 알 수 있게 · DB/데이터

정규화/반정규화가 뭐예요?

정규화와 반정규화를, 같은 정보를 선반 한 칸에만 적는 물류창고 이야기로 풀어봤어요.

이 물류창고가 곧 데이터베이스 세계예요고객 주소가 전표 세 장에 똑같이 적혀 있어요고객이 이사 가면 전표 세 장을 다 고쳐야 해요

고객 주소가 전표 세 장에 똑같이 적혀 있어요.고객이 이사 가면 전표 세 장을 다 고쳐야 해요.

서울시부산시서울시한 장만 고쳤더니 전표마다 주소가 달라요같은 주소가 이렇게 어긋나는 사고가 '이상현상(anomaly)'이에요

한 장만 고쳤더니 전표마다 주소가 달라요.같은 주소가 이렇게 어긋나는 사고가 '이상현상(anomaly)'이에요.

주소 칸번호표→주소칸번호표→주소칸정규화 = 같은 정보는 선반 한 칸에 한 번만 적고, 전표는 번호표로 그 칸을 가리켜요그래서 고객이 이사 가도 주소 칸 하나만 고치면 끝이에요

정규화 = 같은 정보는 선반 한 칸에 한 번만 적어요.그래서 고객이 이사 가도 주소 칸 하나만 고치면 끝이에요.

같은 정보는 한 칸에만중복을 없애요
번호표로 연결하기전표가 선반을 가리켜요
더 잘게 나누기표를 나누면 고칠 곳이 줄어요
자주 같이 읽으면 다시 합치기조인이 줄어 조회가 빨라져요(반정규화)
정규화 vs 반정규화정규화반정규화중복 적지 않기자주 읽는 건 합쳐두기고치기 쉬움조회가 빠름조인이 늘어남값이 어긋날 위험표를 너무 잘게 나눠 조인이 많아지면 다시 합쳐요

정규화는 고치기 쉽고, 반정규화는 조회가 빨라요.표를 너무 잘게 나눠 조인이 많아지면 다시 합쳐요.

정규화 = 주소가 안 어긋나지만 조인 많음반정규화 = 조회는 빠르지만 복제본이 어긋날 수 있음그래서 복제본을 함께 맞추는 규칙과, 동시 수정을 막는 병행제어가 필요해요

반정규화는 조회는 빠르지만 복제본이 어긋날 수 있어요.그래서 복제본을 함께 맞추는 규칙이 필요하고, 동시에 고칠 때 부딪히지 않게 막는 병행제어도 필요해요.

한 줄로

정규화 = 같은 정보를 한 곳에만 적고 번호표로 연결해서 중복과 이상현상을 없애는 규칙, 반정규화는 자주 같이 보는 정보를 일부러 다시 합쳐 조회를 빠르게 하는 것.

정규화는 함수 종속성을 분석해 1NF·2NF·3NF·BCNF 등 단계적으로 테이블을 분해해 삽입/갱신/삭제 이상현상을 제거하는 기법이고, 반정규화는 조회 성능을 위해 정규화된 테이블을 의도적으로 다시 통합하는 것이에요. 실무에서는 둘을 함께 써요.

어른들은 이렇게 불러요

정규화
Normalization
선반을 쪼개 중복을 없애는 것. 1NF→2NF→3NF 순서로 깊어져요.
반정규화
Denormalization
자주 보는 선반을 다시 합치는 것. 조회는 빠르지만 중복이 생겨요.
이상현상(Anomaly)
Anomaly
전표마다 주소가 달라지는 사고. 삽입·갱신·삭제 세 종류가 있어요.
함수적 종속성
Functional Dependency
번호표 하나가 선반 한 칸을 정하는 규칙. 정규화 단계를 가르는 기준이에요.
NoSQL 모델링
NoSQL Modeling
선반 모양을 자유롭게 바꾸는 창고. 정규화 대신 조회 패턴에 맞춰 데이터를 담아요. → 자유로운 선반 창고
병행제어
Concurrency Control
동시에 전표를 쓸 때 부딪히지 않게 막는 규칙. 복제본을 동시에 고칠 때 필요해요. → 동시에 안 부딪히는 규칙
트랜잭션
Transaction
전표 한 장의 작업 단위. ACID 네 가지 약속을 지켜요. → 전표가 지키는 네 약속
샤딩/파티셔닝
Sharding/Partitioning
창고를 구역으로 쪼개는 것. 정규화와는 다른 축의 '나누기'예요. → 구역으로 쪼갠 창고
다음 이야기
상자 모양에 맞춰 선반을 바꾸는 창고 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →