본문 바로가기
IT writer

데이터베이스 정규화 (기초)

by 헬로제이콥 2025. 5. 28.

안녕하세요! 데이터베이스가 어렵게 느껴지시나요? 오늘은 우리 방을 깔끔하게 정리하는 것에 비유해서 데이터베이스 정규화를 쉽고 재미있게 설명해 드릴게요. 딱 3단계만 기억하면 돼요!


정규화가 왜 필요할까요? 🤔

우리 방이 엉망진창이라고 생각해 봐요. 장난감, 옷, 책이 여기저기 널려 있다면 어떨까요?

  • 물건 찾기가 너무 힘들어요! 😩
  • 똑같은 장난감이 여러 개 있는데도 모르고 또 살 수도 있어요! 💸
  • 똑같은 정보가 여러 곳에 있어서 헷갈릴 수 있어요! 🤯

데이터베이스도 마찬가지예요. 데이터가 뒤죽박죽 섞여 있으면 정보를 찾기 어렵고, 잘못된 정보가 생기거나, 저장 공간이 낭비될 수 있어요.

정규화는 이렇게 엉망진창인 데이터베이스를 "깨끗하고 정리된 방"처럼 만드는 과정이랍니다! 💖


정규화 3단계: 우리 방 정리하기 🧹

1단계: 1차 정규화 (1NF) - "물건 하나에 이름 하나만!" 🏷️

우리 방에 신발을 정리한다고 생각해 봐요. 한 신발 상자에 운동화랑 구두랑 같이 넣어두면 나중에 찾기 어렵겠죠?

❌ 엉망진창 테이블 (정규화 전)

| 이름 | 좋아하는 음식 | | :--: | :------------: | | 철수 | 피자, 치킨 | | 영희 | 떡볶이 |

👆 '좋아하는 음식' 칸에 '피자, 치킨'처럼 여러 개가 한꺼번에 적혀 있어요.

✅ 1차 정규화 (1NF) 후

| 이름 | 좋아하는 음식 | | :--: | :------------: | | 철수 | 피자 | | 철수 | 치킨 | | 영희 | 떡볶이 |

이제 한 칸에는 딱 하나의 정보만 들어가도록 만들었어요! 마치 신발 한 짝에 이름 하나만 붙이는 것처럼요. 👟


2단계: 2차 정규화 (2NF) - "진짜 중요한 정보만 따로 모으기!" 🎁

이제 1차 정규화된 테이블을 살펴볼게요. 우리 방에 옷이 있다고 가정해봐요. 옷은 '옷장'에, 책은 '책꽂이'에 넣는 것처럼, 관련 있는 정보끼리 묶어서 따로 보관하는 거예요.

❌ 1차 정규화된 테이블

| 이름 | 좋아하는 음식 | 사는 동네 | | :--: | :------------: | :--------: | | 철수 | 피자 | 서울 | | 철수 | 치킨 | 서울 | | 영희 | 떡볶이 | 부산 |

👆 '철수'는 피자도 치킨도 좋아하지만, '사는 동네'는 계속 '서울'로 똑같아요. '사는 동네'는 '좋아하는 음식'과 직접적인 관련이 없죠?

✅ 2차 정규화 (2NF) 후

테이블 1: 친구들이 좋아하는 음식

| 이름 | 좋아하는 음식 | | :--: | :------------: | | 철수 | 피자 | | 철수 | 치킨 | | 영희 | 떡볶이 |

테이블 2: 친구들의 사는 동네

| 이름 | 사는 동네 | | :--: | :--------: | | 철수 | 서울 | | 영희 | 부산 |

이제 '사는 동네' 정보가 중복되지 않게 따로 분리되었어요! ✨ 이렇게 하면 철수가 이사 가도 '친구들의 사는 동네' 테이블에서 한 번만 바꾸면 돼요.


3단계: 3차 정규화 (3NF) - "연결고리가 없는 짝꿍 없애기!" 🤝

마지막 3단계! 우리 반 친구들과 선생님을 예로 들어볼게요. '우리 반'의 '담당 선생님'은 '내 이름' 때문이 아니라 '우리 반'이라는 정보 때문에 정해져요. 이렇게 간접적으로 연결된 정보는 따로 분리하는 거예요.

❌ 2차 정규화된 테이블 (반 정보)

| 이름 | 반 | 반 담당 선생님 | | :--: | :-: | :-----------: | | 철수 | 1반 | 김 선생님 | | 영희 | 2반 | 박 선생님 | | 민수 | 1반 | 김 선생님 |

👆 '반 담당 선생님'은 '이름'이 아닌 '반'에 의해 결정되는 정보예요.

✅ 3차 정규화 (3NF) 후

테이블 1: 친구들의 반 정보

| 이름 | 반 | | :--: | :-: | | 철수 | 1반 | | 영희 | 2반 | | 민수 | 1반 |

테이블 2: 반별 담당 선생님 정보

| 반 | 반 담당 선생님 | | :-: | :-----------: | | 1반 | 김 선생님 | | 2반 | 박 선생님 |

이제 '반 담당 선생님' 정보가 '반'과 함께 독립된 테이블로 분리되었어요. 🧑‍🏫 이렇게 되면 '1반' 선생님이 바뀌어도 '반별 담당 선생님 정보' 테이블만 고치면 끝! 정말 효율적이죠?


정리하자면! 🌈

데이터베이스 정규화는 데이터를 체계적으로 정리해서:

  • 정보를 쉽게 찾고! 🔍
  • 중복을 줄여서 저장 공간을 아끼고! 💾
  • 잘못된 정보가 생기는 것을 막아주는! 🛡️

아주 똑똑하고 중요한 과정이랍니다! 이제 데이터베이스 정규화, 어렵지 않죠? 😊