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

김민지님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

일대다 [1:N]

여러곳에서 한 테이블의 list가 필요한 경우엔?

22.04.08 19:22 작성

·

306

2

만약 다음과 같이 여러곳에서 image라는 테이블을 참조한다면.. 그땐 어떻게 코드를 구현해야하는건가요?
프로젝트와 이미지는 1:n관계지만 이를 일대다로도 다대일로도 구현할 수있잖아요?
1. 만약에 다대일 양방향으로 구현

2. 일대다 단방향으로 구현

>>첫번째질문 : 어느것으로 해도 상관없나요?

근데 2번 방법을 지양하라고 하셨던 것 같아요 그래서 만약 1번 방법으로 한다고 가정할게요. 

이미지 테이블같은경우 어떨땐 프로젝트의 이미지가 될수있고 (그러면 게시글의 이미지는 아닐테니 게시글_id값은 null이 되겠죠) 어떨땐 게시글의 이미지가 되겠죠..?

>>두번째질문 : 근데 이 이미지가 게시글의 이미지인지 프로젝트의 이미지인지가 중요할까요..?

>>세번째질문 : 만약에 중요하다면 enum을 사용하여 어떤 것의 이미지인지를 반환하는 메서드를 만들어주면되는건가요/?

답변 1

1

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

2022. 04. 10. 14:57

안녕하세요. 김민지님

이 경우 2가지 선택 방법이 있습니다.

1. 연관관계를 사용하는 방법

2. 연관관계 없이 사용하는 방법

 

1. 연관관계를 사용하는 방법

연관관계를 사용해도 되지만, 이렇게 되면 image 테이블에 프로젝트용 FK와 게시글 FK 처럼 수 많은 FK들이 계속 붙게 됩니다. 따라서 이렇게 공통으로 사용하는 테이블의 경우 연관관계를 사용하는 것은 추후 다른 엔티티에서 이미지를 사용할 때 FK가 계속 늘어나는 단점이 있습니다.

 

2. 연관관계를 없이 사용하는 방법

Image 테이블에 구분용 타입(ENUM)과 공통FK 필드를 하나 두는 방법입니다. 그리고 연관관계는 사용하지 않습니다. 이렇게 하면 조회 시점에 타입과 공통 FK 필드를 통해 이미지들을 추가로 조회하시면 됩니다.

감사합니다.