| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 스파르타코딩클럽 #사전캠프
- til #데이터베이스 #sql
- 스터디카페
- 스파르타코딩클럽 #개발자 #백엔드
- 스파르타코딩클럽
- 레퍼클래스
- springboot
- HTTP
- 메모리구조
- 패키지구조
- 함바그
- optional
- Til
- SQLD
- 프레임워크
- 키오스크
- 캡슐화
- 정규화
- 스프링부트
- 깃헙
- Spring
- 내일배움캠프
- 스파르타사전캠프
- 사전캠프
- 데이터모델링
- 계층형
- 도메인별
- 자바
- 네트워크
- Java
- Today
- Total
개발일지
데이터 모델링에서 정규화란? 본문
데이터베이스 설계를 할 때 꼭 알아야 하는 개념 중 하나가 바로 **정규화(Normalization)**이다.
정규화는 데이터를 중복 없이, 일관성 있게, 효율적으로 저장하기 위해 테이블 구조를 정리하는 작업이다.
✅ 정규화를 왜 해야 할까?
- 같은 정보가 여러 곳에 반복되면 수정할 때 오류가 발생하기 쉽다.
- 중복된 데이터는 저장 공간 낭비로 이어진다.
- 테이블이 복잡하면 유지보수가 어려워진다.
이러한 문제를 예방하기 위해 정규화 과정을 통해 데이터를 구조화해야 한다.
📚 정규화의 3단계: 1NF → 2NF → 3NF
정규화는 단계별로 적용하며, 각 단계는 이전보다 더 철저한 정리를 목표로 한다.
🧱 1정규화 (1NF) – "한 칸엔 한 값만 있어야 한다"
- 테이블의 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성)을 갖도록 테이블을 분해하는 단계
- 쉽게 말해 하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행을 분리하는 단계
❌ 정규화 전
| 학생 id | 이름 | 과목 |
| 1 | 철수 | 수학, 영어 |
| 2 | 영희 | 과학 |
위 예시는 과목 칸에 여러 값이 들어 있는 상태이다.
한 칸에 여러 값을 넣으면 검색이나 수정이 어려워진다.
✅ 정규화 후
| 학생ID | 이름 | 과목 |
| 1 | 철수 | 수학 |
| 1 | 철수 | 영어 |
| 2 | 영희 | 과학 |
한 칸에는 하나의 값만 있도록 나누는 것이 1정규화이다.
🧩 2정규화 (2NF) – "부분이 아닌 전체 키에만 의존해야 한다"
- 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블을 분해
- 완전 함수 종속이란, 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정짓는 상태
- 기본키의 부분 집합이 다른 컬럼과 1:1 대응 관계를 갖지 않는 상태를 의미
- 즉, PK(Primary Key)가 2 개 이상일 때 발생하며 PK 의 일부와 종속되는 관계가 있다면 분리한다.
❌ 정규화 전
| 학생ID | 과목명 | 교수이름 |
| 1 | 수학 | 김교수 |
| 1 | 영어 | 이교수 |
| 2 | 수학 | 김교수 |
이 테이블의 기본키는 (학생ID, 과목명)이다.
하지만 교수이름은 오직 과목명에만 관련돼 있으므로, 따로 분리해야 한다.
✅ 정규화 후
수강 테이블
| 학생ID | 과목명 |
| 1 | 수학 |
| 1 | 영어 |
| 2 | 수학 |
과목 테이블
| 과목명 | 교수이름 |
| 수학 | 김교수 |
| 영어 | 이교수 |
이렇게 나누면 모든 컬럼이 기본키 전체에 의존하게 되어 2정규화를 만족한다.
🔗 3정규화 (3NF) – "간접적인 의존성도 제거해야 한다"
- 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리
- 이행적 종속성이란 A -> B, B-> C 의 관계가 성립할 때, A -> C 가 성립되는 것을 말함
- (A,B)와 (B,C)로 분리하는 것이 제 3 정규화
❌ 정규화 전
| 학생ID | 학과 | 학과사무실 |
| 1 | 컴퓨터 | 101호 |
| 2 | 경영 | 202호 |
여기서 학과사무실은 학과에 의존하는 정보이다.
즉, 학생ID → 학과 → 학과사무실이라는 간접적인 의존이 존재한다.
✅ 정규화 후
학생 테이블
| 학생 id | 학과 |
| 1 | 컴퓨터 |
| 2 | 경영 |
학과 테이블
| 학과 | 학과 사무실 |
| 컴퓨터 | 101호 |
| 경영 | 202호 |
이처럼 간접적인 의존성을 제거하여 테이블을 분리하면 3정규화를 만족한다.
📌 한눈에 정리하기
| 정규화 단계 | 핵심 개념 |
| 1NF | 한 칸엔 한 값만 있어야 한다 |
| 2NF | 기본키 전체에만 의존해야 한다 |
| 3NF | 간접적인 의존 관계도 제거해야 한다 |
정규화는 데이터베이스를 깔끔하게 설계하기 위한 기본 원칙이다.
처음에는 복잡해 보일 수 있지만, 중복을 줄이고 일관성을 유지하기 위해 꼭 필요한 과정이다.
'IT공부 > SQL' 카테고리의 다른 글
| 데이터 모델링의 이해 – SQLD 개념 정리 (3) | 2025.07.30 |
|---|---|
| [스파르타 사전캠프] Lv3. 이용자의 포인트 조회하기 (0) | 2025.02.14 |
| [스파르타 사전캠프] Lv2. 날짜별 획득포인트 조회하기 (0) | 2025.02.14 |
| [스파르타 사전캠프] Lv1. 데이터 속 김서방 찾기 (0) | 2025.02.14 |
| IT공부/SQL[스파르타 사전캠프] SQL걷기반 마지막 문제 (0) | 2025.02.10 |