본문 바로가기

Spring 정리/Spring JPA

N:M 테이블 관계 설계하기

반응형

* 개요

 

4가지 JPA 관계 중에, N:M을 알아봅니다. N:M은 실무에서는 잘 사용하지 않는 관계로, 1:N, N:1로 나누어 관리하는 것이 좋습니다. 

 

 

* 특징

 

관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없습니다. 따라서, 일대다, 다대일 관계로 풀어내야 합니다.

 

 

 

 

객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능합니다.

 

 

 

@ManyToMany @JoinTable 2개를 이용해서, MEMBER_ID, PRODUCT_ID를 PK, FK를 가지는 중간 테이블을 생성할 수 있습니다. 양방향 매핑, 단방향 매핑 모두 가능합니다.

 

 

하지만, 중간테이블에 주문시간, 수량같은 데이터가 추가되는 경우가 있을 수 있기 때문에 사용하지 않는게 좋습니다.

 

 

새로운 데이터가 들어오는 경우

 

 

* 한계 극복

 

중간 테이블을 엔티티로 승격시켜, @ManyToMany@OneToMany, @ManyToOne을 사용합니다.

 

 

별도의 엔티티로 만들면, 이전에 @ManyToMany에서는 MEMBER_IDPRODUCT_ID가 PK,FK를 동시에 가져갔지만, 이제 FK만 설정이 됩니다. ORDER_ID를 단독 PK로 따로 관리하는 것이 테이블 변경 유연성에 좋습니다.

 

 

* 정리

 

 N : M 사용법을 알아봤습니다. N : M 은 데이터베이스 설계 상, 존재하지 않으며, 객체 관계에서 표현하다해도 한계점이 있으므로, 1: N, N : 1로 분기해서 사용하는 것이 좋습니다.

 

* 참고

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

반응형