[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)
);