내 잡다한 노트
데이터 정규화(Normalization) 본문
**데이터 정규화(Normalization)**는 데이터베이스 설계에서 중복을 최소화하고 데이터의 일관성을 유지하기 위해 데이터를 구조화하는 과정입니다. 정규화는 데이터를 여러 테이블로 나누고, 각 테이블을 논리적으로 연결하여 효율적이고 관리하기 쉬운 구조를 만듭니다.
정규화의 목표
- 데이터 중복 제거: 중복된 데이터를 줄여 저장 공간을 절약.
- 데이터 무결성 보장: 데이터 변경 시 일관성을 유지.
- 유연성 향상: 데이터 구조 변경 시 영향을 최소화.
- 데이터 관리 용이성: 삽입, 삭제, 갱신 시 이상현상(Anomaly) 방지.
정규화 단계
정규화는 여러 단계로 이루어지며, 각 단계는 특정 규칙을 만족합니다. 주요 단계는 다음과 같습니다:
1. 제1정규형 (1NF):
- 모든 열이 **원자값(Atomic Value)**만 포함하도록 테이블을 정리합니다.
- 중첩된 값이나 반복되는 그룹을 제거합니다.
예시:
고객ID이름구매상품
1 | 홍길동 | 상품A, 상품B |
2 | 김영희 | 상품C |
- 문제: 구매상품 열에 여러 값이 포함되어 있어 비원자적.
- 1NF로 변환:고객ID이름구매상품
1 홍길동 상품A 1 홍길동 상품B 2 김영희 상품C
2. 제2정규형 (2NF):
- 부분 함수 종속을 제거합니다.
- 즉, 기본 키의 일부에만 종속된 컬럼을 별도의 테이블로 분리합니다.
- 1NF를 만족한 상태에서, 기본 키에 종속되지 않은 데이터를 분리합니다.
예시 (1NF 상태):
주문ID고객ID고객이름상품명
101 | 1 | 홍길동 | 상품A |
102 | 2 | 김영희 | 상품C |
- 문제: 고객이름은 고객ID에만 종속되며, 주문ID와는 관계없음.
- 2NF로 변환:
고객 테이블:고객ID고객이름1 홍길동 2 김영희 101 1 상품A 102 2 상품C
3. 제3정규형 (3NF):
- 이행적 함수 종속을 제거합니다.
- 즉, 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 종속되는 것을 방지합니다.
- 2NF를 만족한 상태에서 추가적인 종속성을 제거합니다.
예시 (2NF 상태):
주문ID고객ID고객이름고객주소
101 | 1 | 홍길동 | 서울특별시 |
102 | 2 | 김영희 | 부산광역시 |
- 문제: 고객주소는 고객ID에 종속되며, 주문ID와 직접적인 관계가 없음.
- 3NF로 변환:
고객 테이블:고객ID고객이름고객주소1 홍길동 서울특별시 2 김영희 부산광역시 101 1 102 2
정규화의 장점
- 데이터 무결성 보장:
- 데이터가 중복되지 않아, 데이터 변경 시 일관성을 유지.
- 저장 공간 절약:
- 중복 데이터를 제거하여 효율적으로 저장.
- 유연성 증가:
- 데이터 추가, 삭제, 수정 작업이 쉬워짐.
정규화의 단점
- 복잡한 쿼리:
- 데이터를 여러 테이블로 나누기 때문에 조인(Join)이 많아져 쿼리가 복잡해질 수 있음.
- 읽기 성능 저하:
- 정규화된 데이터베이스는 읽기 작업에서 성능이 저하될 수 있음.
- 비정규화 필요성:
- 성능이 중요한 시스템에서는 정규화를 일부 포기하고 비정규화를 통해 데이터를 중복 저장하기도 함(캐싱, 조회 최적화).
정규화와 비정규화의 균형
- 읽기 성능이 중요한 경우: 일부 비정규화를 허용.
- 데이터 일관성이 중요한 경우: 높은 수준의 정규화를 유지.
- 시스템 요구사항에 따라 정규화와 비정규화를 적절히 조합해야 최적의 설계를 할 수 있습니다.
'DB' 카테고리의 다른 글
DB에서 Join 이란? (0) | 2024.12.09 |
---|---|
Cache의 갱신 방식 (0) | 2024.12.09 |
트랜잭션(Transaction) (1) | 2024.12.09 |
DB에서 ACID 성질 (0) | 2024.12.09 |