일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- CSV
- grafana
- kubeadm
- kubectl
- log
- OS
- docker
- airflow
- Packet
- CVAT
- Vision
- kubernetes
- java
- Kafka
- EC2
- Operating System
- aws s3
- zookeeper
- AWS
- PostgreSQL
- ip
- Trino
- JavaScript
- jvm
- Network
- tcp
- Python
- helm
- Spring
- MAC address
Archives
- Today
- Total
JUST WRITE
Normalization vs Denormalization 본문
Normalization
정규화
Normalization는 RDBMS 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스이다.
각 정규화 단계를 거치며 테이블을 분해한다.
장점
- 이상 현상(Anomaly) 제거
- 저장 공간, 자료 불일치 최소화
- 데이터 구조의 안정성 및 무결성 유지
단점
- Relation 간의 JOIN 연산 증가
제1정규화
1NF 1st Normal Form
제1정규화는 테이블의 컬럼이 원자 값(Atomic Value)을 갖도록 테이블을 분해하는 것이다.
제2정규화
2NF 2nd Normal Form
제2정규화는 제1정규화를 진행하고 테이블이 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어서는 안 되는 것이다.
해당 위 예시의 테이블에서는 학생 번호, 강좌 이름 복합키로 구성되어 있다.
그런데 강의실 컬럼이 기본키의 부분집합인 강좌 이름으로 결정될 수 있다.
기존 테이블에서 강의실을 별도의 테이블로 분해하여 제2정규화를 진행한다.
제3정규화
3NF 3rd Normal Form
제3정규화는 제2정규화를 진행하고 테이블이 이행적 종속을 없애도록 테이블을 분해하는 것이다.
이행적 종속이란 A->B, B->C가 성립할 때, A->C가 성립되는 것을 의미한다.
BCNF 정규화
Boyce-Codd Normal Form
BCNF 정규화는 제3정규화를 진행하고 테이블에 대해 모든 결정자가 후보 키가 되도록 테이블을 분해하는 것이다.
Denormalization
반정규화
Denormalization는 시스템 성능 향상, 개발 및 운영의 편의성을 위해 의도적으로 정규화 원칙을 위배하는 것이다.
장점
- 빠른 데이터 조회 -> JOIN 연산 감소
- 조회 쿼리 단순화
단점
- 데이터 INSERT, UPDATE 비용이 높음
- 데이터 중복이 많으므로 저장 공간 필요
반정규화 대상
- 자주 액세스 하는 테이블이며 일정 범위만 조회하는 경우
- 테이블에 대량의 데이터가 있고 넓은 범위의 데이터 자주 액세스 하는 경우
- 통계 정보를 필요로 하는 경우
- 데이터 조회 시 지나치게 JOIN이 많이 사용하는 경우
반정규화 대체 방안
- JOIN이 많이 사용하는 경우 -> VIEW를 만들어서 조회
- 대량 데이터 처리하는 경우 -> 클러스터링 적용 or Index 조정
- Application 로직 처리 변경
[참고사이트]
728x90
반응형
'Database' 카테고리의 다른 글
Stored Procedure (0) | 2022.01.02 |
---|---|
Transaction (0) | 2021.11.23 |
DBMS vs RDBMS (0) | 2021.11.02 |
Index (0) | 2021.11.01 |
HA vs RAC (0) | 2021.08.28 |
Comments