위 강의를 듣던 중, 다대다 관계를 일대다 + 다대일 관계로 설계한 것을 보았다.
찾아보니 다대다 관계는 실무에서 사용하지 않는 것을 추천한다고 한다. 왜일까?
객체는 다대다 관계를 표현할 수 있으나, 관계형 데이터베이스는 정규화된 테이블 두 개로 다대다 관계를 표현할 수 없다.
따라서 다대다 관계의 연결다리 역할을 하는 조인 테이블을 추가한다.
이 때, 다대다 매핑은 연결 테이블에 단순히 매핑 정보만 넣을 수 있다. 추가 정보를 넣을 수 없다.
하지만 실무에서는 추가 정보를 넣어야 할 때가 있다.
가령, 회원이 상품을 주문하는 경우를 생각해보자.
이 경우 주문 수량 등의 정보 또한 연결 테이블에 저장되어야 한다.
이럴 때 필요한 것이 다대다 관계를 일대다-다대일로 풀어내는 방법이다.
@ManyToMany를 이용해서 다대다 관계로 표현하지 않고,
양 끝단에서 @OneToMany로 연결테이블과 연결하고,
연결 테이블의 엔티티에서는 양 끝의 엔티티를@ManyToOne로 매핑하여 중간다리 역할을 하도록 한다.
주문 상품 테이블에는
주문 수량과, 주문 시점의 금액 정보가 담긴다.
코드는 아래 블로그를 참고할것!