본문 바로가기

Dev/JPA

RS) 다대다 관계

테이블에서의 다대다 관계

  • 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음
  • 연결 테이블을 통해서 다대일 관계로 풀어야 한다.

객체에서의 다대다 관계

  • 객체는 컬렉션(List)을 사용해서 객체2개로 다대다 관계가 가능하다.

@ManyToMany 사용하여 연관관계를 지을 순 있다.

@JoinTable로 연결은 가능하다.


다대다 매핑의 한계

  • 편리해 보이지만 실무에서 사용해서는 안된다.
  • 연결 테이블이 단순히 연결만 하고 끝나지 않는다.
  • ex) 주문시간, 수량 같은 데이터가 들어올 수 있음

다대다 한계 극복

  • 연결 테이블용 엔티티를 추가한다. (연결 테이블을 엔티티로 승격)
  • @ManyToMany → @OneToMany, @ManyToOne으로 나눠서 연관관계를 짓는다.
  • 연결 테이블의 PK는 별도로 시퀀스 형태로 가는 방향이 합리적이다.
  • PK면서 FK형태인 복합키 형태보다 별도의 PK를 두고 아래에 FK들을 따로 빼는 것이 좋다.
  • 아래 그림에서 왼쪽보다는 오른쪽 형태로 사용하는 것이 바람직하다는 뜻이다.

 


그림참조