• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Item - OrderItem 관계 및 양방향관계?

23.04.20 18:34 작성 23.04.20 18:40 수정 조회수 613

1

  1. ORDERS와 ORDER_ITEM의 관계는 하나의 주문 안에, 주문된 여러가지 아이템(book,album,movie등)이 있을 수 있기 때문에 1:N인 것 이 맞나요 ?

  2. OrderItem과 Item의 관계가 잘 이해 가지 않아서 찾아보다가 https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21699&category=questionDetail&tab=community&q=805804 이 답변을 보고 헷갈리는 부분이 있는데요. Book을 n번 주문할 수 있기 때문에 1:N이라고 하셨는데 이 말은 즉, Book이라는 아이템 안에서도 주문된 여러가지 책(일본 책, 독일 책, 한국책) 이 있을 수 있기 때문에 1:N이라는 말일까요?

  3. 어떤 Member가 어떤 주문을 했는지 Order를 참고하는 것과 어떤 Order가 무엇을 구매했는지 Order_Item을 참고하는 것이 같은 맥락이라고 생각하는데 전자는 잘못된 설계고 후자는 괜찮은 설계인 이유는 무엇일까요?

답변 1

답변을 작성해보세요.

4

y2gcoder님의 프로필

y2gcoder

2023.04.21

안녕하세요, hjemsti 님. 공식 서포터즈 y2gcoder 입니다.

연관관계에 대해 질문해주셨습니다. 하나씩 답변하도록 해보겠습니다.

ORDERS와 ORDER_ITEM의 관계는 하나의 주문 안에, 주문된 여러가지 아이템(book,album,movie등)이 있을 수 있기 때문에 1:N인 것 이 맞나요 ?

=> 맞습니다. 저희가 흔히 쇼핑몰에서 주문할 때를 생각해보시면 좋을 것 같습니다. 장바구니에 3개의 상품을 넣어두고 한꺼번에 주문할 때, 하나의 주문번호에 여러 개의 주문상품이 담기는 것과 같다고 생각하시면 될 것 같습니다.

OrderItem과 Item의 관계가 잘 이해 가지 않아서 찾아보다가 https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21699&category=questionDetail&tab=community&q=805804 이 답변을 보고 헷갈리는 부분이 있는데요. Book을 n번 주문할 수 있기 때문에 1:N이라고 하셨는데 이 말은 즉, Book이라는 아이템 안에서도 주문된 여러가지 책(일본 책, 독일 책, 한국책) 이 있을 수 있기 때문에 1:N이라는 말일까요?

=> 해당 부분은 DB와 1:N 관계에 대한 학습이 필요한 부분입니다. 설명이 헷갈릴 수 있는 부분이 있어서 이해해드리겠습니다. Book이라는 아이템 안에서 일본 책, 독일 책, 한국책 등이 있다는 것은 아닙니다. 그 대신, 여기서 1:N 관계의 의미는 하나의 Book(아이템)이 여러 번 주문될 수 있고, 각 주문은 각각의 OrderItem에 매핑되는 것입니다.

영한님의 자바 ORM 표준 JPA 프로그래밍 책 을 예로 들어서 설명해보겠습니다. 이 책이 한 번 주문되면 이 주문은 하나의 OrderItem에 매핑되고, 같은 책이 다시 주문되면 다른 OrderItem에 매핑됩니다. 즉, 자바 ORM 표준 JPA 프로그래밍이라는 Book(아이템)은 여러 번 주문될 수 있으며, 각각의 주문은 각각의 OrderItem과 연결되기 때문에 1:N 관계입니다.

간단하게 요약하면, 이 1:N 관계는 하나의 아이템(Book)이 여러 개의 주문(OrderItem)과 연결될 수 있음을 의미합니다. 아이템 내부의 책 종류와는 관련이 없습니다.

 

예를 들어, 동일한 책 '해리포터와 마법사의 돌'이라는 아이템이 있을 때, 이 책이 한 번 주문되면 이 주문은 하나의 OrderItem에 매핑되고, 같은 책이 다시 주문되면 다른 OrderItem에 매핑됩니다. 즉, '해리포터와 마법사의 돌'이라는 Book(아이템)은 여러 번 주문될 수 있으며, 각각의 주문은 각각의 OrderItem과 연결되기 때문에 1:N 관계입니다.

간단하게 요약하면, 이 1:N 관계는 하나의 아이템(Book)이 여러 개의 주문(OrderItem)과 연결될 수 있음을 의미합니다. 아이템 내부의 책 종류와는 관련이 없습니다.

어떤 Member가 어떤 주문을 했는지 Order를 참고하는 것과 어떤 Order가 무엇을 구매했는지 Order_Item을 참고하는 것이 같은 맥락이라고 생각하는데 전자는 잘못된 설계고 후자는 괜찮은 설계인 이유는 무엇일까요?

=> 어떤 맥락에서 이렇게 설명하게 되셨는지 궁금합니다. 개인적으로 영한님 강의를 들으면서 생각한 바와 위의 엔티티들을 연결지어서 말씀드리겠습니다. Order와 OrderItem은 서로 강하게 연관되어 있습니다. Order를 생성하면서 OrderItem도 생성하게 되어있기 때문에 생명주기가 일치하고 주문을 조회할 때 보통 주문 아이템도 조회하는 만큼, 강하게 연관되어 있기 때문입니다. 그래서 이런 상황에서는 양방향 연관관계로 Order에서도 OrderItem을 참조하도록 하는게 괜찮다고 생각합니다.
반면 Member와 Order는 같이 사용할 일이 많지 않을 수도 있습니다. Member를 생성할 때 Order를 같이 생성하는 경우도 거의 없고, 회원 정보를 조회할 때 관련된 주문을 조회할 필요가 없을 때도 많습니다. 이러한 경우에서는 굳이 Member에서 Order를 참조하도록 연관관계를 짤 필요가 없습니다.
예를 들어 회원의 마이 페이지에서 주문 목록을 보여줘야 한다면? 이라고 물어보실 수 있다고 생각합니다. 이 경우는 굳이 Member의 조회가 필요하지 않을 수도 있습니다. 마이 페이지에 접근한다면 회원의 ID는 알고 있을 것이고 회원의 ID만 가지고 Order를 기준으로 바로 조회하는 것이 나은 선택일 수 있습니다. 이처럼 Member에서 Order를 참조할 필요는 없습니다. 다만 이는 요구사항에 따라 다를 수 있습니다. 저는 일반적인 경우를 예로 들어 설명드렸을 뿐입니다.

감사합니다.