공통 기준값
사용자 이름은 원래 users.name에 있습니다.
주문 목록에서 이름을 보여 주려면, 이 값을 그대로 참조할지 아니면 orders에 복사해 둘지 선택하게 됩니다.
정규화
조회 시 조인
orders (id, user_id, ...)
users (id, name, ...)
주문 조회
orders에서 user_id를 읽습니다.
이름 확인
users와 조인해서 users.name을 가져와야 합니다.
중복은 없지만, 주문 목록마다 이름 조회를 위해 조인이 따라옵니다.
반정규화
조인 없이 조회
orders (id, user_id, user_name, ...)
users.name 값을 orders.user_name에 복사
주문 조회
orders 한 테이블만 읽어도 user_name이 바로 보입니다.
효과
주문 목록 화면에서 사용자 이름을 조인 없이 빠르게 표시할 수 있습니다.
조회는 단순해지지만, 이름이 복사본으로 두 군데 존재하게 됩니다.
갱신 이상 위험
원본 이름이 바뀌면 복사본도 함께 바뀌어야 합니다.
예를 들어 users.name이 바뀌었는데 orders.user_name이 그대로 남아 있으면, 주문 화면에는 오래된 이름이 표시됩니다. 그래서 반정규화는 조회 성능 대신 정합성 유지 비용을 감수하는 선택입니다.
users.name
변경 전
Kim
변경 후
Lee
orders.user_name
같이 갱신 전
Kim
같이 갱신 후
Lee