다섯 살도 알 수 있게 · DB/데이터
정규화/반정규화가 뭐예요?
정규화와 반정규화를, 같은 정보를 선반 한 칸에만 적는 물류창고 이야기로 풀어봤어요.
고객 주소가 전표 세 장에 똑같이 적혀 있어요.고객이 이사 가면 전표 세 장을 다 고쳐야 해요.
한 장만 고쳤더니 전표마다 주소가 달라요.같은 주소가 이렇게 어긋나는 사고가 '이상현상(anomaly)'이에요.
정규화 = 같은 정보는 선반 한 칸에 한 번만 적어요.그래서 고객이 이사 가도 주소 칸 하나만 고치면 끝이에요.
같은 정보는 한 칸에만중복을 없애요
번호표로 연결하기전표가 선반을 가리켜요
더 잘게 나누기표를 나누면 고칠 곳이 줄어요
자주 같이 읽으면 다시 합치기조인이 줄어 조회가 빨라져요(반정규화)
정규화는 고치기 쉽고, 반정규화는 조회가 빨라요.표를 너무 잘게 나눠 조인이 많아지면 다시 합쳐요.
반정규화는 조회는 빠르지만 복제본이 어긋날 수 있어요.그래서 복제본을 함께 맞추는 규칙이 필요하고, 동시에 고칠 때 부딪히지 않게 막는 병행제어도 필요해요.
한 줄로
정규화 = 같은 정보를 한 곳에만 적고 번호표로 연결해서 중복과 이상현상을 없애는 규칙, 반정규화는 자주 같이 보는 정보를 일부러 다시 합쳐 조회를 빠르게 하는 것.
정규화는 함수 종속성을 분석해 1NF·2NF·3NF·BCNF 등 단계적으로 테이블을 분해해 삽입/갱신/삭제 이상현상을 제거하는 기법이고, 반정규화는 조회 성능을 위해 정규화된 테이블을 의도적으로 다시 통합하는 것이에요. 실무에서는 둘을 함께 써요.
어른들은 이렇게 불러요
- 정규화
Normalization - 선반을 쪼개 중복을 없애는 것. 1NF→2NF→3NF 순서로 깊어져요.
- 반정규화
Denormalization - 자주 보는 선반을 다시 합치는 것. 조회는 빠르지만 중복이 생겨요.
- 이상현상(Anomaly)
Anomaly - 전표마다 주소가 달라지는 사고. 삽입·갱신·삭제 세 종류가 있어요.
- 함수적 종속성
Functional Dependency - 번호표 하나가 선반 한 칸을 정하는 규칙. 정규화 단계를 가르는 기준이에요.
- NoSQL 모델링
NoSQL Modeling - 선반 모양을 자유롭게 바꾸는 창고. 정규화 대신 조회 패턴에 맞춰 데이터를 담아요. → 자유로운 선반 창고
- 병행제어
Concurrency Control - 동시에 전표를 쓸 때 부딪히지 않게 막는 규칙. 복제본을 동시에 고칠 때 필요해요. → 동시에 안 부딪히는 규칙
- 트랜잭션
Transaction - 전표 한 장의 작업 단위. ACID 네 가지 약속을 지켜요. → 전표가 지키는 네 약속
- 샤딩/파티셔닝
Sharding/Partitioning - 창고를 구역으로 쪼개는 것. 정규화와는 다른 축의 '나누기'예요. → 구역으로 쪼갠 창고
다음 이야기
상자 모양에 맞춰 선반을 바꾸는 창고 →