본문 바로가기
Project/DelFood

[이슈 #2] 고객의 주문 내역을 조회할 때 테이블 다수 조인 이슈 - 2

by EricJeong 2019. 9. 23.

https://deveric.tistory.com/59

 

[이슈 #1] 고객의 주문 내역을 조회할 때 테이블 다수 조인 이슈

위 프로젝트에 대한 소개는 다음 URL에서 확인할 수 있습니다. ERD와 Github 등의 URL이 포함되어있습니다. https://deveric.tistory.com/58 [DelFood] 프로젝트 소개 Spring-boot를 이용한 프로젝트를 구상하게..

deveric.tistory.com

 

위 글에서 이어지는 내용입니다.

 


조인하는 테이블을 하나 줄였지만 여전히 7개의 테이블을 주인하여야 고객의 주문 내역을 조회할 수 있습니다.

 

주문시 조인하는 테이블

주문 - 주문 메뉴 - 주문메뉴 옵션 - 메뉴 옵션 - 메뉴옵션 카테고리 - 메뉴 - 고객

 

이번에는 여기서 '메뉴옵션 카테고리'테이블을 역정규화 해보는 것이 어떨까 생각하고있습니다.

 

현재는 메뉴옵션 카테고리 밑에 메뉴 옵션이 있는 구조로 되어 있습니다.

이전 글에서 만들어 놓은 테이블을 다시 보여드리자면 다음 구조와 같습니다.

 

 

후라이드 치킨 - 17,000원

Category - 시즈닝
1. 치즈 시즈닝 추가 (500원)
2. 양파 시즈닝 추가 (500원)
Category - 곱빼기
양 200g 추가 (3000원)

 

 

Category에 있는 부분을 테이블로 따로 뺐지만, 카테고리 테이블은 자체적으로 가지고 있는 정보가 얼마 되지 않는다고 판한하였고 메뉴옵션 카테고리의 테이블 정보를 메뉴 옵션에 포함시키는 방법을 고려하였습니다.

 

현재 메뉴 옵션 - 메뉴옵션 카테고리 - 메뉴 카테고리의 관계는 다음과 같습니다.

 

 

 

 

이중 메뉴 옵션 테이블의 '카테고리 아이디' 부분을 '카테고리' 정보로 바꾼다면 테이블 역정규화가 가능할 것입니다.

'메뉴 옵션' 테이블에 추가할 컬럼은 '메뉴 옵션 카테고리'가 가지고 있는 정보인 '카테고리 이름'과 '메뉴 아이디'입니다.

 

이를 반영한 결과는 다음과 같습니다.

 

 

메뉴 옵션 테이블을 조회 할 때 카테고리 별로 보여주고 싶다면, 카테고리별로 정렬시킨 이후 보여주면 될 것입니다.

조인 테이블이 하나 더 줄어들어서 성능 개선에 도움이 되었으면 좋겠습니다.

 

현재 주문내역 조회시 조인 테이블은 

주문 - 주문 메뉴 - 주문메뉴 옵션 - 메뉴 옵션 - 메뉴 - 고객

총 6개입니다.

 

성능을 조금이라도 더 좋게 하기 위해 이제 역정규화보다는 인덱스를 활용해보려고 합니다.

댓글