본문 바로가기

springboot

[스프링 부트 JPA 활용] 도메인 분석 설계

 

도메인 분석 설계 https://www.inflearn.com/course/스프링부트-JPA-활용-1/dashboard

출처 : 김영한님 실전! 스프링 부트와 JPA 활용1

 

Member - Order

Member과 Order는 양방향 일대다 다대일 관계이다. 

@JoinColumn(name="member_id")로 Order가 member의 member_id를 FK로 가진다.

Member는 Order를 단순 조회용으로 사용하고 Order의 값을 바꿔야 이 연관관계에서 데이터가 바뀌며, Order를 생성할 때 Member가 필요하기 때문에 연관관계의 주인은 Order가 된다.

 

* 보통 일대다 관계에서는 '다'에 해당하는 쪽이 주인을 가져간다.

* FK에 가까운 쪽이 주인이 된다. 

 

Order - OrderItem도 비슷하다. 

 

OrderItem - Item

단방향 다대일 관계이다. 

OrderItem이 Item의 item_id를 FK로 가져간다.

Item은 Order를 갖고있을 필요가 없기 때문에 단방향이다.

 

 

여기까지 해서 데이터가 들어왔을 때 예상 구조를 그려보면 아래와 같이 그려진다.

 

Item

Item Type을 Album, Book, Movie로 나누고 각각은 Item을 상속 받는다.

상속은 Single table에 몰아넣기 때문에 DB Table을 확인해보면 Item Table에 artist, etc, author, isbn, director, actor이 들어가있다.

 

 

Category

부모, 자식 카테고리를 위해서 자기자신을 참조하도록 셀프로 양방향 매핑했다.

 

 

Item - Category

양방향 다대다 관계이다. 

@JoinTable을 이요해 별도의 Table을 만들어 관리한다. category_iditem_id를 매핑한다.

joinColumns는 현재 Entity(Category)를 참조하는 FK이고, inverseJoinColumns는 반대 방향 Entity(Item)을 참조하는 FK이다.