혹시 데이터베이스 테이블이 완전 잡동사니 창고처럼 보인 적 있어? 한 셀에는 전화번호 리스트, 다른 셀에는 한 문장으로 쭉 써놓은 주소, 또 다른 셀에는 쉼표로 구분된 여러 날짜가 들어있고. 이런 "혼돈"은 데이터 검색, 업데이트, 관리가 엄청 힘들어져. 근데 질서로 가는 길이 있어. 그 이름이 바로 데이터 정규화야.
쉽게 말해서, 데이터 정규화는 테이블에서 데이터를 정리해서 데이터 중복을 최소화하고, 업데이트, 삭제, 삽입과 관련된 문제를 없애는 과정이야.
정규화가 해결하는 문제는 이런 것들이야:
- 데이터 중복 제거. 똑같은 정보를 두 번, 세 번 저장할 필요가 있을까? 이러면 DB 용량만 커지고 데이터 불일치가 생길 수 있어.
- 이상 현상 최소화. 우리 인생에도 이상한 상황이 생기잖아? 예를 들어, 예전 동료를 연락처에서 깜빡하고 안 지웠다든가. DB에서도 이런 일이 생겨. 정규화는 이런 어색한 상황을 막아줘.
- 데이터 구조 단순화. 구조가 단순할수록 관리하기 쉽지.
- DB 성능 향상. 데이터가 적으면 쿼리도 더 빨라져.
정규화 안 하면 어떻게 될까?
정규화 안 하면 DB 데이터가 "끈적끈적"해져 — 항상 쓸데없는 정보 덩어리를 끌고 다니는 느낌이야.
학생들 테이블을 상상해봐:
| 학생 ID | 이름 | 과목들 |
|---|---|---|
| 1 | Otto Lin | 수학, 물리 |
| 2 | Anna Song | 화학 |
| 3 | Otto Lin | 생물학, 화학 |
뭐가 문제일 수 있을까:
- 데이터 중복:
Otto Lin이 여러 번 나와. 왜냐면 여러 과목을 듣고 있으니까. - 정보 업데이트가 힘듦: 만약 학생 Otto Lin의 전화번호가 바뀌면, 그 학생의 모든 레코드를 찾아서 번호를 바꿔야 해.
- 데이터 삭제가 무결성을 깨뜨릴 수 있음: Otto가 과목을 그만두기로 했다면, 그의 모든 행을 삭제하면 이름까지 다 사라져버려.
정규화가 오히려 과한 경우는?
솔직히 말해서, 정규화는 엄격한 시간표 같아: 항상 좋지만, 가끔은 즉흥성이 필요하지. 실제로는 비정규화가 더 나은 경우도 있어:
- 분석용 데이터베이스에서는 데이터 용량 최소화보다 쿼리 속도가 더 중요할 때가 많아.
- 구조가 너무 복잡해질 때: 정규형을 지키려고 수십 개의 테이블을 써야 한다면, 쿼리가 점점 더 복잡해질 거야.
- 자주 쓰는 집계값: 항상 같은 합계를 계산한다면, 그냥 그 값을 테이블에 저장하는 게 나아.
예를 들어, 인터넷 쇼핑몰이 있다고 해보자. 만약 유저들이 주문 총액을 자주 조회한다면, 주문들 테이블에 그 합계를 저장하는 게 매번 계산하는 것보다 나을 수 있어.
근데 비정규화는 타협이야. 데이터 업데이트할 때 오류가 생길 확률이 높아진다는 걸 꼭 기억해야 해.
문제 있는 구조와 정규화 예시
정규화 전 테이블 예시를 보자:
| 주문 ID | 고객 | 상품들 | 주문 금액 |
|---|---|---|---|
| 1 | Otto Lin | 휴대폰, 이어폰 | 20000 |
| 2 | Anna Song | 냉장고 | 30000 |
| 3 | Otto Lin | TV | 40000 |
여기서 명확하게 보이는 문제:
- 고객 정보가 반복돼.
- 상품이 리스트로 저장됨 — 데이터 원자성 원칙 위반이야.
정규화 후
이 테이블을 세 개로 나눌 거야: 고객들 테이블
| 고객 ID | 이름 |
|---|---|
| 1 | Otto Lin |
| 2 | Anna Song |
상품들 테이블
| 상품 ID | 이름 | 가격 |
|---|---|---|
| 1 | 휴대폰 | 10000 |
| 2 | 이어폰 | 10000 |
| 3 | 냉장고 | 30000 |
| 4 | TV | 40000 |
주문들 테이블
| 주문 ID | 고객 ID | 상품 ID |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 1 | 4 |
이제 우리는:
- 데이터 중복이 없어.
- 각 상품이 별도의 행에 있어.
- 새로운 상품이나 주문을 쉽게 추가할 수 있어.
정규화는 혼돈에서 질서를 만드는 기술이야. 가끔 너무 엄격하고 까다롭게 느껴질 수 있지만, 그 최종 목표는 충분히 가치 있어. 다음 강의에서는 정규형을 차례대로 배울 거야: 먼저 1NF, 그다음 2NF, 그리고 마지막으로 3NF. 자, 정돈된 데이터의 세계로 가보자!
GO TO FULL VERSION