[sql] 반정규화의 예시: 조인 효율화

관계형 데이터베이스에서는 정규화 과정을 통해 중복을 제거하고 데이터를 구조화하여 저장합니다. 그러나 때로는 이 정규화된 구조로 인해 조회 성능이 저하될 수 있습니다. 이때 반정규화를 사용하여 성능을 개선할 수 있습니다.

예시: 주문 및 제품 정보

예를 들어, 주문 관련 정보와 제품 관련 정보가 다음과 같이 분리되어 있다고 가정해 봅시다.

CREATE TABLE 주문 (
   주문번호 INT PRIMARY KEY,
   고객번호 INT,
   주문일자 DATE
);

CREATE TABLE 제품 (
   제품번호 INT PRIMARY KEY,
   제품명 VARCHAR(50),
   가격 DECIMAL(10, 2)
);

이 구조에서는 주문 정보와 제품 정보를 조회하기 위해 조인 연산을 사용해야 합니다.

반정규화

이때 반정규화를 통해 주문 테이블에 제품 정보를 포함하여 저장한다면 조인 연산을 줄일 수 있습니다.

CREATE TABLE 주문 (
   주문번호 INT PRIMARY KEY,
   고객번호 INT,
   주문일자 DATE,
   제품번호 INT,
   제품명 VARCHAR(50),
   가격 DECIMAL(10, 2)
);

이렇게 주문 테이블에 제품 정보를 포함시킴으로써 조인 연산의 효율을 개선할 수 있습니다.

결론

반정규화의 목표는 데이터베이스 성능 향상이며, 주로 읽기 작업이 많은 시스템에서 유용합니다. 그러나 이는 데이터 중복과 데이터 일관성에 대한 책임을 사용자가 직접 관리해야 한다는 단점이 있습니다.

참고: 반정규화와 조인 최적화