테이블에서의 다대다 관계
- 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음
- 연결 테이블을 통해서 다대일 관계로 풀어야 한다.
객체에서의 다대다 관계
- 객체는 컬렉션(List)을 사용해서 객체2개로 다대다 관계가 가능하다.
@ManyToMany 사용하여 연관관계를 지을 순 있다.
@JoinTable로 연결은 가능하다.
다대다 매핑의 한계
- 편리해 보이지만 실무에서 사용해서는 안된다.
- 연결 테이블이 단순히 연결만 하고 끝나지 않는다.
- ex) 주문시간, 수량 같은 데이터가 들어올 수 있음
다대다 한계 극복
- 연결 테이블용 엔티티를 추가한다. (연결 테이블을 엔티티로 승격)
- @ManyToMany → @OneToMany, @ManyToOne으로 나눠서 연관관계를 짓는다.
- 연결 테이블의 PK는 별도로 시퀀스 형태로 가는 방향이 합리적이다.
- PK면서 FK형태인 복합키 형태보다 별도의 PK를 두고 아래에 FK들을 따로 빼는 것이 좋다.
- 아래 그림에서 왼쪽보다는 오른쪽 형태로 사용하는 것이 바람직하다는 뜻이다.
'Dev > JPA' 카테고리의 다른 글
RS) MappedSuperclass 매핑 정보 상속(상속관계X) (0) | 2022.02.22 |
---|---|
RS) 상속관계 매핑 (0) | 2022.02.22 |
RS) 연관관계 매핑시 주의할 점 (0) | 2022.02.15 |
RS) 양방향 연관관계와 연관관계의 주인 (0) | 2022.02.06 |
RS) 연관관계 매핑 기초 (0) | 2022.02.06 |