Spring/SpringBoot

도메인 분석 설계 - 도메인 모델과 테이블 설계

느리지만 꾸준하게 2022. 4. 2. 17:57

회원 - 주문 : 1:N

 

주문 - 상품(물품) 여러개 주문 가능 1 : n => 중간에 주문상품을 두어서 여러개를 놓는다.

 

카테고리 - 상품 n : n

 

도메인 모델

 

 

회원 엔티티

pk 값을 다 Long type으로 잡았다.

임베디드 타입(내장 값 타입)으로 Address를 넣어주었다.

orders는 주문을 List로 가지게 된다.

Order와 Item사이 중간에 OrderItem이 있는데 1 : N , N : 1 이 있는 관계를 풀어서 만들었다.

( id, item, order, orderPrice, count를 넣어놓았다.)

 

그리고  Member가 Order가지고 있고 Order는 Member을 가지고 있는 양방향 연관관계이다.

이 관계의 내용은 회원이 주문을 생성하는 것으로 생각하지 말고 주문이 필요할 때 회원을 생성한다 라고 생각하자.

(즉 order에서 필터링 조건으로 member가 들어가게 된 것이다.)

 

 

 

 

 

회원 테이블 분석

MEMBER 같은 경우는 거의 1:1 Mapping이다. MEMBER와 DELIVERY의

CITY / STREET / ZIPCODE는 value type이 쭉 들어가 있는 것이다.

ITEM같은 경우는 single table 전략을 쓴 것이다.(한 테이블에 다 넣고 DT그리고  Member가 Order가지고 있고 Order는 Member을 가지고 있는 양방향 연관관계이다.

이 관계의 내용은 회원이 주문을 생성하는 것으로 생각하지 말고 주문이 필요할 때 회원을 생성한다 라고 생각하자.

(즉 order에서 필터링 조건으로 member가 들어가게 된 것이다.)

 

 

Category같은 경우에는 관계형 데이터베이스에서 중간에 mapping table를 두어야 한다.

(즉 CATEGORY와 ITEM의 관계를 n : n 관계를 1:n  / n:1관계로 바꿔야한다.)

 

 

연관관계 매핑 분석

회원 엔티티 그림 부분에서 

주문쪽에 외래키가 있다.(1:n의 n쪽에 무조건 외래키가 존재한다.)

Order의 있는 MEMBER가 연관관계의 주인이 된다. 연관관계의 주인을 세팅 해야 값이 변경이 된다.

 

그리고 마지막 내용에 ManyToMany는 실무에서는 쓰면 안된다.

그리고 꼭 외래키(FK)가 있는 곳을 연관관계의 주인으로 정해줘라.

 

 

<출처 김영한: 실전! 스프링 부트와 JPA 활용1 - 웹 어플리케이션 개발 >

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강

www.inflearn.com