2025. 3. 13. 14:32ㆍBack-End/DB
정규화(Normalization)와 비정규화(Denormalization)는 데이터베이스 설계에서 데이터를 어떻게 구조화할지 결정하는 과정입니다. 두 개념은 서로 상반된 접근을 취합니다.
정규화 (Normalization)
정규화는 데이터베이스의 중복을 최소화하고, 데이터의 무결성을 유지하기 위해 데이터를 여러 개의 테이블로 분리하는 과정입니다. 정규화를 통해 데이터베이스는 더 효율적이고, 유지보수가 쉬워지며, 중복된 데이터를 피할 수 있습니다.
정규화의 목표:
- 중복 제거: 같은 정보가 여러 테이블에 중복되어 저장되는 것을 방지합니다.
- 데이터 무결성 유지: 일관성 있는 데이터를 유지하여 업데이트, 삽입, 삭제 시 오류를 방지합니다.
정규화는 여러 단계로 이루어지며, 각 단계에서 테이블을 분리하거나 관계를 설정하여 중복을 제거합니다. 각 단계는 "정규형(Normal Form)"이라고 불리며, 보통 1NF (제1정규형)에서 5NF (제5정규형)까지 나뉩니다.
예시:
1NF(제1정규형): 데이터는 원자값(atomic value)으로 분리되어야 하며, 각 컬럼은 하나의 값만을 가져야 합니다. 2NF(제2정규형): 1NF를 만족하면서, 부분 함수 종속성(partial dependency)을 없애야 합니다. 3NF(제3정규형): 2NF를 만족하면서, 이행적 함수 종속성(transitive dependency)을 제거해야 합니다.
비정규화 (Denormalization)
비정규화는 정규화를 반대로, 성능을 개선하기 위해 일부러 중복 데이터를 허용하는 과정입니다. 비정규화는 읽기 성능을 최적화하거나 복잡한 조인을 피하고자 할 때 사용됩니다.
비정규화의 목표:
- 성능 향상: 중복 데이터를 허용하여 데이터를 더 쉽게 조회하거나, 조인을 최소화하여 성능을 향상시킬 수 있습니다.
- 복잡한 쿼리 최적화: 데이터의 중복을 일부 허용함으로써 복잡한 쿼리를 단순화할 수 있습니다.
비정규화는 주로 데이터베이스의 읽기 성능을 개선하고자 할 때 사용되며, 중복 데이터를 관리해야 하므로 삽입, 수정, 삭제 시 성능에 영향을 미칠 수 있습니다.
예시:
정규화된 상태에서는 주문 테이블과 고객 테이블을 분리하여 고객ID를 외래 키로 사용하고, 주문을 조회할 때마다 고객 정보를 JOIN해야 할 수 있습니다. 비정규화된 상태에서는 주문 테이블에 고객 정보를 중복으로 저장하여, 고객 정보를 별도로 조회할 필요 없이 주문 테이블만으로 빠르게 조회할 수 있게 됩니다.
정리:
- 정규화: 데이터를 분리하고 중복을 제거하여 데이터의 무결성과 일관성을 유지하는 것.
- 비정규화: 성능을 위해 데이터를 중복 저장하거나, 쿼리 최적화를 위해 일부러 데이터를 중복시키는 것.
정규화와 비정규화는 데이터베이스 설계에서 상황에 맞게 적절히 선택하여 사용해야 합니다.
'Back-End > DB' 카테고리의 다른 글
PostgreSQL 자주 쓰는 명령어 요약 (0) | 2025.04.16 |
---|---|
macOS에 PostgreSQL 설치 (0) | 2025.04.16 |
MyBatis Mapper 사용 팁 (0) | 2025.04.08 |
비관적 락 vs 낙관적 락: 동시성 문제를 해결하는 두 가지 방법 (0) | 2025.03.23 |
JPA + Oracle DB에서 시퀀스 설정하는 방법 (0) | 2025.03.15 |