인프런 커뮤니티 질문&답변

보키님의 프로필 이미지
보키

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

회원 조회 API

강사님 다대다 설정과 개인프로젝트 적용에 대해 질문있습니다

해결된 질문

작성

·

1.2K

0

강좌에는 카테고리-상품에 N:M 다대다 관계로 해놓으셨는데요!

제가 30살인데 29살에 퇴사하고 혼자 JPA공부해서 학교다니던 친구와 백1프론트1을 맡아서 프로젝트를 만들고있는데.. 1:N, N:1은 좀 해결했는데 N:M에서 막히고있어요ㅠㅠ 약간 힌트라도 주실 수 있으신지 해서 여쭤봅니다. 질문이 너무 많아서 힘드시면 직접적으로 말씀하셔도괜찮습니다..!

만약에 이런 경우는 어떻게 하나요?

(1) ~한다,~되다의 V 중간테이블

1.여러명의 회원은 여러개의 게시글을 찜목록에 추가할 수 있다.

1-1. 여러명의 회원은 여러개의 공고를 찜목록에 추가할 수 있다.

1-2. 여러명의 회원은 여러개의 기업을 찜목록에 추가할수있다.

USER(회원)과 기업/공고/게시글 엔티티 사이에 중간테이블을 놓고 유저ID랑, 각각 필요한 기업/공고/게시글 아이디로 매핑해놓은 상태인데요 - 검은색

이렇게 하는게 맞는지 궁금합니다.

(2) ~한다,~되다의 V 중간테이블

[회원]은 여러개의 [이력서]로 [공고]에 [지원]할 수 있다라고 해서

이력서와 공고의 N:M관계를 해소하고자 중간테이블을 만들고 지원한다라는 APPLY 엔티티를 따로 만들었는데, JPA에서도 이렇게 하면 되는건가요..?

(3) 중간테이블 질문

DB상으로는 외래키가 PK가 되면서 한 테이블안에 PK가 없어도 된다는 식으로 들었는데, 검색을해보니 JPK는 PK가 있어야된다하더라구요!?

만약에 N:M관계 중간에 중간테이블을 만들면 보통은 외래키 2개가 들어가는데, JPA식으로 만들면 PK, FK, FK해서 총 3개가 만들어지는게 맞나요?

(4) intelliJ에서 DB연결을 하고 data Diagram Visualization으로 매핑관계를 살펴보니

이렇게 나오는데.. intelliJ나 datagrip에서는 흔히 까마귀발이라고 하는 1:N, N:1 관계는 안보여주더라구요..!

그리고 mysql workbench reverse engineer모드로 erd를 그려봤는데..여기에서는 1:1관계도 1:N으로 나오는데...(분명히 유저와 멤버는 @OneToOne으로 양방향 매핑했는데도 이렇게 나옵니다.

혹시 DB를 설계하면서 잘 되었는지 erd로 뽑아보고싶은데, 아직 완벽하게 보여주는 건 없는건가요..?

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 보키님

1. 이렇게 여러곳과 연관관계가 있으면 연관관계를 다 제거하고 테이블을 단순하게 구성하는게 더 나은 선택일 수 있습니다.

테이블의 구성 컬럼이 type(게시판, 공고), id 이렇게요. 공통 코드 테이블도 보통 이런식으로 설계합니다.

2. (2) ~한다,~되다의 V 중간테이블

JPA 기본편 강의 다대다를 참고해주세요.

3. 중간테이블 질문

JPA 기본편 강의 다대다를 참고해주세요.

4. 이 부분은 저도 잘 모르겠습니다.

감사합니다.

보키님의 프로필 이미지
보키
질문자

역시 강의참고해서 많이혼자 해봐야겠네요...! 감사합니다

김영한님의 프로필 이미지
김영한
지식공유자

네 화이팅!

0

보키님의 프로필 이미지
보키
질문자

이미지들은 새 탭에서 이미지 열기로 하면 크게 잘 보이는것같습니다 ㅠㅠ

보키님의 프로필 이미지
보키

작성한 질문수

질문하기