[sql] 반정규화를 적용한 예시: 사용자와 주소 테이블

관계형 데이터베이스 설계에서 반정규화는 중복 데이터를 포함한 테이블을 통합하여 성능을 향상시키는 과정입니다. 이를 구체적으로 살펴보기 위해 사용자 및 주소 정보를 포함하는 테이블을 고려해봅시다.

사용자 테이블

사용자 ID 이름 나이 주소 ID
1 홍길동 30 1
2 김철수 25 2
3 박영희 28 1

주소 테이블

주소 ID 주소 우편번호
1 서울 강남구 12345
2 서울 마포구 54321

위의 테이블은 정규화되어 있지만, 사용자 테이블주소 테이블을 조인하여 사용자의 주소 정보를 얻기 위해서는 두 개의 테이블을 조회해야 합니다. 이를 해결하기 위해 반정규화를 적용해서 사용자 테이블에 주소 정보를 추가할 수 있습니다.

반정규화된 사용자 테이블

사용자 ID 이름 나이 주소 ID 주소 우편번호
1 홍길동 30 1 서울 강남구 12345
2 김철수 25 2 서울 마포구 54321
3 박영희 28 1 서울 강남구 12345

이제, 주소우편번호 정보가 사용자 테이블에 함께 저장되어 불필요한 조인을 피할 수 있게 되었습니다.

이처럼, 반정규화를 통해 데이터베이스 성능을 최적화할 수 있지만, 중복 데이터 관리와 일관성 유지에 대한 주의가 필요합니다.

더 자세한 정보는 반정규화를 참고하세요.

-- 반정규화된 사용자 테이블 생성 예시
CREATE TABLE 사용자 (
  사용자ID INT PRIMARY KEY,
  이름 VARCHAR(50),
  나이 INT,
  주소ID INT,
  주소 VARCHAR(100),
  우편번호 VARCHAR(10)
);