📚 코드로 배우는 스프링부트 웹 프로젝트
회원이 영화에 대한 평점과 감상을 기록하는 시나리오를 기반의 프로젝트
- 한 편의 영화는 여러 회원의 평가가 행해질 수 있다.
- 한 명의 회원은 여러 영화에 대해서 평점을 줄 수 있다.
M:N 관계의 경우 논리적 설계와 실제 테이블 설계가 다르게 된다
- 영화, 회원 엔티티 자체는 각각이 독립적 개체이며, 이 경우 엔티티는 대부분 명사이다
- 회원의 입장에서는 여러 편의 영화를 평가한다
- 영화의 입장에서는 한 편의 영화에는 여러 회원이 존재한다
➡️ 대표적인 예로 학생-수업, 상품-카테고리, 상품-회원 관계가 있다
관계형 데이터베이스는 테이블이라는 정형화된 구조를 가지게 된다
칼럼 지정 시 최대 크기를 지정하므로 수평적 확장이 불가능하다
반면에, Row라는 개념을 이용하여 수직적으로는 확장이 가능하다
M:N을 해결하기 위해서 실제 테이블 설계에서는 매핑 테이블을 사용한다
수직으로 데이터를 확장할 수 있다는 점에 착안하여 N개의 데이터가 들어가야 하는 경우에는 별도의 테이블로 분리하는 방식이다<매핑 테이블 특징>
- 작성 이전에 다른 테이블들이 먼저 존재해야만 한다
- 주로 '명사'가 아닌 '동사'나 '히스토리'에 대한 데이터를 보관하는 용도이다
- 중간에서 양쪽의 PK를 참조하는 형태로 사용된다
- @ManyToMany를 이용하여 처리하는 방식
- 별도의 엔티티를 설계하고, @ManyToOne을 이용하여 처리하는 방식