정규화란 무엇인가? 중복을 없애고 효율을 높이는 데이터 구조화의 기술 (데이터분석 기초, SQLD 독학)
“이 테이블... 뭔가 너무 중복돼 있는데?” 이런 생각이 든 적 있다면, 여러분은 이미 정규화가 필요한 상황에 직면한 겁니다.
안녕하세요, 문노베입니다.
SQLD 자격증을 준비하면서 가장 헷갈리기도 하고, 동시에 가장 중요한 개념 중 하나가 바로 정규화(Normalization)입니다.
특히 비전공자 입장에선 “왜 굳이 이렇게 복잡하게 나눠야 하지?” 하는 생각이 들 수 있어요.
하지만 실무에서 데이터 중복, 비일관성, 관리 어려움 등의 문제를 해결하는 가장 확실한 방법이 바로 이 정규화예요.
이번 글에서는 정규화의 개념과 목적부터 제1~제3정규형까지 핵심만 뽑아 예시와 함께 쉽고 명확하게 풀어드릴게요.
목차
1. 정규화는 왜 필요한가요?
정규화는 ‘꼭 필요한 데이터만 남기고, 중복을 없애고, 효율적으로 나누는 작업’입니다.
왜 이게 필요할까요? 아래처럼 중복된 테이블을 상상해 보세요.
Order ID | Customer | Address | Pizza |
---|---|---|---|
001 | Alice | Seoul | Cheese |
002 | Alice | Seoul | Pepperoni |
여기서 ‘Customer’와 ‘Address’ 정보가 반복되죠?
이런 중복이 많아지면 관리가 어렵고, 데이터 변경 시 오류 가능성도 커져요.
그래서 정규화를 통해 고객은 고객 테이블, 주문은 주문 테이블처럼 역할을 나누는 게 필요해요.
2. 정규화란 무엇인가요?
정규화(Normalization)는 테이블을 구조적으로 쪼개고, 관계를 명확하게 만들어서 중복을 줄이고 무결성을 높이는 방법이에요.
정규화의 핵심은 단순합니다:
- 중복 제거 – 같은 데이터를 여러 곳에 저장하지 않음
- 데이터 무결성 보장 – 변경 시 오류나 누락 최소화
- 유지보수 편리 – 테이블이 깔끔하면 수정도 쉬움
이제부터는 제1정규형(1NF), 제2정규형(2NF), 제3정규형(3NF)을 순서대로 살펴볼 거예요.
3. 제1정규형(1NF): 반복되는 데이터를 없애라
1NF는 테이블의 각 셀에는 하나의 값만 들어가야 한다는 규칙이에요.
즉, 반복되는 데이터가 한 칸에 들어가면 안 됩니다.
예시 👇
Order ID | Customer | Pizza |
---|---|---|
003 | Bob | Cheese, Pepperoni |
문제: Pizza 칼럼에 2개 값이 콤마로 들어갔어요.
해결: 한 줄씩 분리해야 합니다. → Cheese는 한 줄, Pepperoni는 한 줄. → 그리고 나중엔 주문상세 테이블로 따로 떼어내야겠죠?
4. 제2정규형(2NF): 부분 종속은 안 된다
2NF에서는 “복합 키”를 사용하는 경우, 모든 속성이 그 전체 키에 ‘완전히’ 의존해야 한다는 조건이 추가돼요.
쉽게 말하면, 테이블의 기본키 일부에만 의존하는 속성이 있으면 분리하자는 거예요.
예시) 아래 테이블을 보면 기본키가 (학생ID, 과목명)인데, 학생명은 ‘학생ID’만으로도 결정되죠?
학생ID | 과목명 | 학생이름 |
---|---|---|
A01 | SQL | Alice |
문제: '학생이름'은 '학생ID'에만 의존 → 부분 종속! 해결: 학생 정보는 학생 테이블로 분리해야 합니다.
5. 제3정규형(3NF): 이행 종속도 제거하자
3NF는 “기본키가 아닌 속성이, 또 다른 속성에 의존하지 않도록 분리하는 것”이에요.
이를 ‘이행 종속’이라고 불러요.
예시) 아래 테이블을 보세요.
상품ID | 카테고리 | 부서명 |
---|---|---|
P01 | 디지털 | 전자사업부 |
‘부서명’은 ‘카테고리’에 따라 결정되고, 카테고리는 상품ID에 의해 결정됩니다.
즉, 상품ID → 카테고리 → 부서명 구조 = 이행 종속! 해결: 부서명은 따로 분리해서 관리해야 해요.
6. 실전 예제: 피자 주문 테이블 정규화하기
예를 들어 아래처럼 구성된 테이블을 보세요:
Order ID | Customer Name | Pizza | Pizza Price |
---|---|---|---|
004 | Tom | Cheese | 10,000 |
005 | Tom | Pepperoni | 12,000 |
정규화 결과:
- 고객(Customer): 고객ID, 고객명
- 피자(Pizza): 피자ID, 피자명, 가격
- 주문(Order): 주문ID, 고객ID
- 주문상세(Order_Detail): 주문ID, 피자ID → 데이터 중복도 줄고, 확장성도 높아져요!
7. 핵심 요약 & 시험/실무 연결
- 제1정규화: 한 셀에 여러 값이 들어가면 안 됨 → 반복 컬럼 제거
- 제2정규화: 복합키 일부에만 의존하는 속성 분리
- 제3정규화: 기본키가 아닌 속성이 다른 속성에 의존하지 않도록 분리
- 정규화의 목적: 중복 제거, 무결성 보장, 관리 효율 향상
- SQLD 시험 출제 포인트: 정규형 분류, 테이블 분리 판단, 사례 분석
SQLD에서는 "다음 중 정규화가 필요한 테이블은?" 같은 유형, 혹은 "아래 테이블은 몇 정규형인가?" 같은 출제가 자주 등장해요.
핵심은 구조적으로 생각하고, 쪼개는 이유를 말할 수 있어야 합니다.
정규화는 외우는 개념이 아니라, 상식처럼 이해하고 설계에 적용하는 구조적 사고입니다.
다음 글에서는 정규화를 기반으로 실제 테이블들을 어떻게 조합하고, 복잡한 데이터를 SQL로 조회할 때 어떤 구조가 가장 좋은지를 알아볼 거예요.
'자격증 정복기 > SQLD - SQL Developer가 되어보자' 카테고리의 다른 글
개체-관계 모델, 비전공자도 이해할 수 있다! (ERD, 엔터티, SQLD 독학, 데이터분석 기초) (0) | 2025.05.01 |
---|---|
SQLD 시험, 준비 전에 꼭 알아야 할 5가지 (데이터분석 기초, 마케터를 위한 SQL) (1) | 2025.05.01 |
SQL? DB? SELECT? … 이게 다 뭐야? 핵심만 알고가자! (데이터베이스 공부, SQLD 독학) (1) | 2025.04.30 |
마케터인 내가, SQLD 자격증은 대체 왜 따야 할까? (데이터분석 기초, SQL 독학) (0) | 2025.04.30 |
댓글