22. 다대다 [N:M]

김성수·2023년 4월 10일
0

⚡ 생각대로 살지 않으면 사는대로 생각한다.

⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.


실무에서 안씀. 편안하게 들으면 됨.

다대다

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

Member와 Product가 다대다 관계라면, 중간에 테이블을 하나 더 만들어서 풀어낸다.

  • 객체는 테이블과 다르게, 컬렉션을 사용해서 객체 2개로 다대다 관계 가능

  • @ManyToMany 사용
  • @JoinTable로 연결 테이블 지정
  • 다대다 매핑 : 단방향, 양방향 가능

이런 방식으로 할 수 있다.

다대다 매핑의 한계

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

다대다 한계 극복

  • 연결 테이블용 엔티티 추가(연결 테이블을 엔티티로 승격)
  • @ManyToMany -> @OneToMany, @ManyToOne

위와 같은 식으로 코드를 작성해서 매핑 할 수 있다.

전통적인 설계방식에서는 위 그림처럼 PK로 잡으면서 각각을 FK로 지만,

영한좌가 많이 공부하고 부딪히면서 느낀점은 웬만하면 PK는 의미없는 값을 쓰는 것을 권장한다.
사실은 알고보면 MEMBER_ID, PRODUCT_ID도 의미 없는 값이다..
나중을 생각하면 유연해진다.
처음에는 유리하지만, 애플리케이션이 계속 발전하는데, Id가 어딘가에 종속뇌는 식으로 걸리게 되면, 시스템을 유연하게 변경하는 것이 쉽지가 않다고 함.

영한좌가 선호하는 방식.

profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

0개의 댓글