인프런 커뮤니티 질문&답변

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

이러한 상황에서는 복합키와 대리키 중 어느것을 사용해야 하나요?

작성

·

532

·

수정됨

0

안녕하세요 현재 한 사용자가 한 상점에 대해서 특정 유형의 주문을 몇 번 했는지 조회하는 기능을 구현하고 있습니다.

처음에는 주문 테이블의 모든 튜플을 조회하면서 shopid, userid, orderType이 일치하는 경우 값을 누적하는 방식으로 구현을 했는데요,

테이블이 갈수록 커지고 이러한 조회가 기획 상 굉장히 빈번하기 때문에 한 유저가 한 상점에 대해 특정 유형의 주문을 몇번 했는지 기억하는 별도의 테이블을 생성하기로 하였습니다.

테이블은 userId, shopId, reservationCount, pickupCount, noShowCount 를 필드로 갖도록 구현했습니다.

그런데 여기서 기본키를 설정해야 하는데 저는 userId, shopId를 복합키로 하는 것이 좋다고 생각했습니다. 그 이유는 이러한 통계성 테이블이 join을 하는 상황이 없고, 한 유저가 특정 샵을 처음 이용할 때만 튜플이 생기고 이후에는 필드 값만 변경이 이루어지며, 조회가 매우 빈번하기 때문에 userId, shopId를 기본키로 하여 인덱싱을 활용하면 좋다고 생각했기 때문입니다.

근데 강사님이 설명하시기를 실무에서는 복합키를 거의 사용하지 않는다고 말씀해주셨는데 이러한 상황에서도 그냥 대리키를 쓰는 것이 낫나요?

복합키를 활용한 인덱싱 vs 대리키 + shopId, userId 추가 인덱싱

이 둘 중 하나를 적용할 거 같은데 무엇을 기준으로 어떻게 판단해야 할 지 잘 모르겠습니다. 도움 주시면 감사하겠습니다.

 

참고로 db는 mysql사용중입니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 주문 정보와 통계 정보를 저장하는 테이블에 기본키를 설정해야 하는데, userId와 shopId를 기본키로 사용하는 것이 좋을까요?

실무에서는 주로 대리키를 사용하고, 복합키는 거의 사용하지 않는 경향이 있습니다. 복합키를 사용하면 성능과 유지보수 측면에서 일부 문제가 발생할 수 있기 때문입니다. 대리키를 사용하면 각각의 행에 고유한 식별자를 부여할 수 있으므로 중복되는 데이터를 효과적으로 처리할 수 있습니다. 또한, 나중에 다른 필드를 기준으로 조회하거나 조인할 때도 편리합니다.

따라서 별도로 생성한 복합키 대신 대리키를 사용하는 것이 좋을 것 같습니다. 대리키로는 일련번호, 고유 해시 값을 사용할 수 있으며, 데이터베이스 시스템이 자동으로 관리하는 자동증가(Auto Increment) 기능을 활용할 수도 있습니다. 이렇게 대리키를 사용하면 빈번한 조회와 인덱스 활용에도 더욱 효율적으로 처리할 수 있을 것입니다.

더 궁금하신 사항이 있으시다면, 언제든지 질문해주세요. 좋은 결과 있으시길 바랄게요!

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

질문하기