자격증 정복기/SQLD - SQL Developer가 되어보자

정규화란 무엇인가? 중복을 없애고 효율을 높이는 데이터 구조화의 기술 (데이터분석 기초, SQLD 독학)

문노베 2025. 5. 6.

정규화란 무엇인가? 중복을 없애고 효율을 높이는 데이터 구조화의 기술 (데이터분석 기초, SQLD 독학)

“이 테이블... 뭔가 너무 중복돼 있는데?” 이런 생각이 든 적 있다면, 여러분은 이미 정규화가 필요한 상황에 직면한 겁니다.

 

정규화란 무엇인가? 중복을 없애고 효율을 높이는 데이터 구조화의 기술 (데이터분석 기초, 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)을 순서대로 살펴볼 거예요.

 

정규화(Normalization)는 테이블을 구조적으로 쪼개고, 관계를 명확하게 만들어서 중복을 줄이고 무결성을 높이는 방법이에요.



정규화의 핵심은 단순합니다:

중복 제거 – 같은 데이터를 여러 곳에 저장하지 않음
데이터 무결성 보장 – 변경 시 오류나 누락 최소화
유지보수 편리 – 테이블이 깔끔하면 수정도 쉬움

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로 조회할 때 어떤 구조가 가장 좋은지를 알아볼 거예요.

반응형

댓글