강의

멘토링

로드맵

Inflearn brand logo image

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

ho_0214님의 프로필 이미지
ho_0214

작성한 질문수

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

다대다 [N:M]

다대다 관계를 어떻게 풀어내야 할지 고민입니다.

작성

·

70

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
회원, 부서 테이블을 생성하다 고민이 생겨 해당 강의를 다시 복습해봐도 어떻게 하는게 좋을지 모르겠어 질문하게 되었습니다.

먼저 회원테이블은

  • 회원 ID (PK)

  • 부서 ID (FK, 부서테이블PK) , NULL

부서 테이블은

  • 부서 ID (PK)

  • 부서생성자 ID(FK, 회원테이블PK), NOT NULL

     

로 구성되어 있는 상황입니다.

필드의 개수를 최대한 간략히 나타내었는데,
이러한 상황에서
1. 중간테이블을 만드는게 나을지
( 이 경우 유저ID, 부서ID, type{소속 or 생성}),

2. 회원테이블의 부서ID와 부서테이블의 회원ID에 각각 ManyToOne을 걸어주는게 나을지

더 좋은 방법을 찾기가 어려워 질문드립니다!

답변 2

0

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

안녕하세요. ho_0214님

다대다 관계로 풀어내야 하는가 아닌가에 대한 핵심적인 질문은

하나의 회원이 여러 부서에 소속될 수 있는가. 그리고 하나의 부서에 여러 회원이 소속될 수 있는가 입니다.

이 둘을 동시에 만족해야 한다면 반드시 중간 테이블을 두고 다대다 관계로 풀어내야 합니다.

이런 상황이 아니라면 중간 테이블 없이 간단히 해결하는 것이 보통 좋은 방법입니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ho_0214님!

다대다 관계를 구현하는 방법은 몇 가지로 나뉠 수 있습니다. 회원과 부서 간의 관계에 대해 고민이 많으실 것 같습니다. 이 문제는 여러 방향으로 접근할 수 있습니다.

  1. 중간 테이블을 사용하는 방법

    • 회원과 부서 간의 다대다 관계를 해결하기 위해 중간 테이블을 사용하는 것이 일반적입니다. 이 경우, 중간 테이블은 유저의 소속이나 역할, 생성 등 추가 정보를 저장할 수 있도록 디자인할 수 있습니다. 중간 테이블에는 유저ID와 부서ID 외에도 어떤 관계를 나타내는지를 저장할 수 있는 type 열을 추가할 수 있습니다. 이는 관계를 명확하게 정의하고 확장 가능하게 만들어 주죠.
  2. ManyToOne을 사용하여 관계 설정

    • 회원 테이블에서 부서 ID를 FK로 설정하고, 부서 테이블에서 부서 생성자 ID를 FK로 설정하여 관계를 직접적으로 매핑할 수도 있습니다. 이 경우에는 관계를 간단하게 설정할 수 있지만, 관계의 유연성이나 추가적인 관계 정보를 담기 어려울 수 있습니다(예: 몇 시점에 소속되었는지 등).

강의에서 다대다 관계에 대한 설명이 있었을 것인데, 이를 다시 한번 복습하시면 이해하는 데 도움이 될 것입니다. 데이터를 어떻게 설계할지는 애플리케이션의 기능 요구 사항에 따라 결정됩니다.

추가 참고 자료

여기에서 유사한 질문과 답변을 확인하실 수 있습니다:
- ORM 질문드립니다 !
- 좋은 강좌 항상 감사드립니다. 추가로 질문이 있습니다

위의 링크에서 다대다 관계 처리와 관련된 다양한 접근 방법을 확인하고, 자신의 상황에 맞는 방법을 선택하시면 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ho_0214님의 프로필 이미지
ho_0214
질문자

현재 1번과 2번 방식 모두 고려 중입니다.
1번은 다대다 관계를 풀어내는 가장 보편적인 방법이라고 생각합니다. 다만, 이 경우
회원ID, 부서ID 그리고 관계 타입(부서생성, 부서 소속 등) 컬럼을 포함한 중간 테이블을 설계해야 합니다. 이러한 타입 분기를 위해 중간 테이블을 만드는 것이 과한 설계가 아닐까 하는 고민이 있어, 2번 방식도 함께 검토하고 있습니다.

2번 방식처럼 회원 테이블에서 부서ID를 FK로, 부서 테이블에서 생성자ID를 FK로 두는 구조는 단순하고 명확하지만, 실무에서도 이러한 방식이 괜찮은 설계로 받아들여지는지 확신이 서지 않아 추가로 질문드립니다.

혹시 실무에서 유사한 사례가 있다면 방향성 잡는 데 큰 도움이 될 것 같습니다.

ho_0214님의 프로필 이미지
ho_0214

작성한 질문수

질문하기