DB/SQL
데이터 정규화의 정의, 목적, 단계(1NF~3NF), 장단점, 그리고 실무 적용까지
로기221
2025. 5. 22. 09:44
728x90
반응형
데이터 정규화(Normalization)란?
데이터 정규화는 데이터베이스 설계에서 데이터의 중복을 최소화하고, 데이터 무결성과 일관성을 유지하기 위해 테이블을 구조화하는 과정이다. 즉, 데이터를 논리적으로 여러 개의 테이블로 분해하여 불필요한 중복을 제거하고, 삽입·수정·삭제 시 발생할 수 있는 이상현상(Anomaly)을 방지하는 것이 목적이다.
정규화의 목적
- 데이터 중복 최소화: 같은 데이터가 여러 곳에 저장되는 것을 방지.
- 데이터 무결성 유지: 데이터의 일관성과 정확성을 보장.
- 이상현상 방지: 삽입, 삭제, 갱신 시 발생할 수 있는 데이터 불일치 문제(Anomaly) 해결.
- 유지보수 용이: 데이터 구조 변경이나 확장 시 재설계 부담 감소.
정규화의 단계와 예시
정규화는 여러 단계(정규형, Normal Form)로 나뉘며, 실무에서는 주로 1NF~3NF까지 적용한다.
1. 데이터베이스 정규화 예제
비정규형 테이블
OrderID | Customer | ProductIDs |
1 | John | 101, 102, 103 |
2 | Jane | 104 |
제1정규형 (1NF)
- 의미: 테이블의 모든 컬럼이 원자값(atomic value, 더 이상 나눌 수 없는 값)을 갖도록 함.
- 예시: 한 컬럼에 여러 값(예: "010-1234-5678, 031-123-4567")이 들어가 있다면, 각각의 값이 별도의 행이나 컬럼에 들어가도록 분리.
제1정규형(1NF)으로 변환
OrderID | Customer | ProductIDs |
1 | John | 101 |
1 | John | 102 |
1 | John | 103 |
2 | Jane | 104 |
설명: 한 셀에 여러 값이 있던 ProductIDs를 각각의 행으로 분리하여 원자값만 남기도록 함
제2정규형 (2NF)
- 의미: 1NF를 만족하면서, **기본키의 부분집합에만 종속된 속성(부분 함수 종속)**을 제거.
- 예시: 복합키(예: 학생번호, 과목명)로 이루어진 테이블에서, 일부 컬럼(예: 강사명)이 전체 키가 아니라 과목명에만 종속된다면, 강사명 정보를 별도 테이블로 분리.
제2정규형(2NF) 예시
OrderID | ProductID | Customer | ProductName |
1 | 101 | John | Widget A |
2 | 102 | Jane | Widget B |
→ 2NF로 분해
- Order 테이블
-
OrderIDCustomer
1 John 2 Jane - Product 테이블
-
ProductIDProductName
101 Widget A 102 Widget B - OrderProduct 테이블
-
OrderIDProductID
1 101 2 102
제3정규형 (3NF)
- 의미: 2NF를 만족하면서, **기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속(이행적 종속)**되지 않도록 분리.
- 예시: 학생 테이블에서 지도교수, 학과가 있을 때, 학과가 지도교수에 의해 결정된다면, 학과 정보를 별도 테이블로 분리.
제3정규형(3NF) 예시
OrderID | CustomerID | Customer | NameProductID |
1 | 1 | John | 101 |
2 | 2 | Jane | 102 |
→ 3NF로 분해
- Order 테이블
-
OrderIDCustomerID
1 1 2 2 - Customer 테이블
-
CustomerIDCustomerName
1 John 2 Jane - Product 테이블
-
ProductIDProductName
101 Widget A 102 Widget B - OrderProduct 테이블
-
OrderIDProductID
1 101 2 102
(고급) BCNF, 4NF, 5NF
- 실무에서는 대부분 3NF까지 적용하며, 특수한 상황에서 BCNF, 4NF, 5NF까지 적용하기도 한다.
정규화의 장점과 단점
장점 | 단점 |
데이터 중복 감소 | 복잡한 JOIN 쿼리 필요 |
데이터 무결성 보장 | 성능 저하 가능성(읽기 성능) |
저장 공간 효율화 | 설계 및 관리 복잡성 증가 |
데이터 구조 변경 용이 | 트랜잭션 처리 복잡성 |
정규화가 필요한 이유
정규화를 하지 않으면 다음과 같은 "이상현상(Anomaly)"이 발생할 수 있다
- 삽입 이상: 일부 데이터만 추가하고 싶어도 다른 정보까지 같이 입력해야 하는 문제
- 삭제 이상: 한 정보만 삭제하고 싶어도 관련된 다른 정보까지 삭제되는 문제
- 갱신 이상: 중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 문제
정규화 vs. 비정규화
정규화는 데이터 무결성과 중복 최소화에 초점을 두지만, 읽기 성능이 중요한 환경(예: 데이터 분석, 리포트 등)에서는 일부러 비정규화(denormalization)를 적용하여 성능을 높이기도 한다.
마무리
데이터 정규화는 데이터베이스의 기본이자 핵심 설계 원칙이다. 데이터의 중복을 줄이고, 무결성을 보장하며, 유지보수와 확장성을 높일 수 있다. 하지만 무조건 높은 단계로 정규화하는 것이 능사는 아니며, 시스템의 목적과 특성에 따라 적절한 수준의 정규화를 적용하는 것이 중요하다..
728x90
반응형