정규화 비정규화

2025. 3. 13. 14:32Back-End/DB

반응형

정규화(Normalization)와 비정규화(Denormalization)는 데이터베이스 설계에서 데이터를 어떻게 구조화할지 결정하는 과정입니다. 두 개념은 서로 상반된 접근을 취합니다.

정규화 (Normalization)

정규화는 데이터베이스의 중복을 최소화하고, 데이터의 무결성을 유지하기 위해 데이터를 여러 개의 테이블로 분리하는 과정입니다. 정규화를 통해 데이터베이스는 더 효율적이고, 유지보수가 쉬워지며, 중복된 데이터를 피할 수 있습니다.

정규화의 목표:

  1. 중복 제거: 같은 정보가 여러 테이블에 중복되어 저장되는 것을 방지합니다.
  2. 데이터 무결성 유지: 일관성 있는 데이터를 유지하여 업데이트, 삽입, 삭제 시 오류를 방지합니다.

정규화는 여러 단계로 이루어지며, 각 단계에서 테이블을 분리하거나 관계를 설정하여 중복을 제거합니다. 각 단계는 "정규형(Normal Form)"이라고 불리며, 보통 1NF (제1정규형)에서 5NF (제5정규형)까지 나뉩니다.

예시:

1NF(제1정규형): 데이터는 원자값(atomic value)으로 분리되어야 하며, 각 컬럼은 하나의 값만을 가져야 합니다. 2NF(제2정규형): 1NF를 만족하면서, 부분 함수 종속성(partial dependency)을 없애야 합니다. 3NF(제3정규형): 2NF를 만족하면서, 이행적 함수 종속성(transitive dependency)을 제거해야 합니다.

비정규화 (Denormalization)

비정규화는 정규화를 반대로, 성능을 개선하기 위해 일부러 중복 데이터를 허용하는 과정입니다. 비정규화는 읽기 성능을 최적화하거나 복잡한 조인을 피하고자 할 때 사용됩니다.

비정규화의 목표:

  1. 성능 향상: 중복 데이터를 허용하여 데이터를 더 쉽게 조회하거나, 조인을 최소화하여 성능을 향상시킬 수 있습니다.
  2. 복잡한 쿼리 최적화: 데이터의 중복을 일부 허용함으로써 복잡한 쿼리를 단순화할 수 있습니다.

비정규화는 주로 데이터베이스의 읽기 성능을 개선하고자 할 때 사용되며, 중복 데이터를 관리해야 하므로 삽입, 수정, 삭제 시 성능에 영향을 미칠 수 있습니다.

예시:

정규화된 상태에서는 주문 테이블과 고객 테이블을 분리하여 고객ID를 외래 키로 사용하고, 주문을 조회할 때마다 고객 정보를 JOIN해야 할 수 있습니다. 비정규화된 상태에서는 주문 테이블에 고객 정보를 중복으로 저장하여, 고객 정보를 별도로 조회할 필요 없이 주문 테이블만으로 빠르게 조회할 수 있게 됩니다.

정리:

  • 정규화: 데이터를 분리하고 중복을 제거하여 데이터의 무결성과 일관성을 유지하는 것.
  • 비정규화: 성능을 위해 데이터를 중복 저장하거나, 쿼리 최적화를 위해 일부러 데이터를 중복시키는 것.

정규화와 비정규화는 데이터베이스 설계에서 상황에 맞게 적절히 선택하여 사용해야 합니다.

반응형