개발자

DB에서 Group과 User 테이블의 관계

2024년 03월 19일조회 120

group에서 user의 아이디를 받아 저장하는데, group에서 user를 찾는 건 쉽지만, user가 속한 group을 찾는데에는 어려움이 있을 거 같습니다. user 테이블에 group의 갯수를 제한해서 받는 것이 나을지, 다른 방법이 있는지 알려주세요! join도 생각해봤는데, 데이터양이 너무 많아질 거 같아서 고민입니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

ㄱㅎㅁ님의 프로필 사진

group에 user_id가 왜 있을까요? group table이 실제로는 group_user 에 대한 table인건지? group_user table에 대한거라면, user_id에 index를 걸고 join을 하시면 될거 같고, group table이라면 group_user라는 별도의 table을 만드시는건 어떨까요?

나정님의 프로필 사진

나정

작성자

상명대 공대2024년 03월 19일

앗 제 설명이 부족했네여! 초대 코드를 만들어서 그룹을 생성할 때 유저가 멘토이고, 그룹에 들어온 유저가 멘티로 구상하고 있습니다! 제가 생각했을 때는, group 안의 구성원이 누가 있나를 저장하기 위하여 group table에 user_id를 추가했습니다. group_user라는 별도의 table을 만들 때에는 어떤 식으로 구상하는 게 좋을지 조언 부탁드립니다! 답변 정말 감사합니다!

ㄱㅎㅁ님의 프로필 사진

ㄱㅎㅁ

백엔드 개발자2024년 03월 19일

group table에는 group에 대한 내용만 있고 group_user table에는 pk, group_id, user_id, reg_dt .... 와 같이 group과 user의 join 테이블로 활용하며, index를 group_id 와 user_id에 대해 각각 만들어주면 될꺼같습니다. 그래서 group에 어떤 사용자가 있는지는 group, left join group_user, inner join user을 하고 (user_id만 필요하다면 group, group_user 까지만 join) 어떤 user가 어떤 group에 있냐는건 user, left join group_user, inner join group을 하면 될것 같습니다.

나정님의 프로필 사진

나정

작성자

상명대 공대2024년 03월 19일

답변 감사합니다!! 이해했어요! 😃

ccat님의 프로필 사진

group_id / mentor_id / mentee_id 이런식으로 그룹디비를 생성하시고 Onetomany manytoone을 걸어주신 후에 mentee_id에서 걸려있는 group을 조회를 하면 user가 속한 group을 쉽게 찾을수 있을겁니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 03월 19일

데이터베이스 설계에 관한 질문인 것 같습니다. 각 사용자가 여러 그룹에 속하고, 하나의 그룹이 여러 사용자를 가질 수 있다면, 이는 'Many-to-Many' 관계로 볼 수 있습니다. 이런 경우 중간 테이블 (일반적으로 '조인 테이블' 또는 '중개 테이블'이라고 불림)을 사용하여 관계를 처리하는게 일반적입니다. 예를 들어, `User`, `Group` 및 `User_Group` 등 3개의 테이블을 만들 수 있습니다. `User_Group`은 User와 Group 사이의 Many-to-Many 관계를 정의하는 조인 테이블으로 사용됩니다. - `User`: id(PK), username 등 유저 정보 컬럼 - `Group`: id(PK), groupname 등 그룹 정보 컬럼 - `User_Group`: user_id(FK), group_id(FK) 여기서 'PK'는 Primary Key(기본키), 'FK'는 Foreign Key(외래키) 를 의미합니다. `User_Group` 테이블에서는 user_id와 group_id가 외래키로 설정되며, 각각 User 테이블과 Group 테이블의 id를 참조할 것입니다. SpringBoot에서 JPA와 함께 사용한다면 @JoinTable 어노테이션을 이용해서 이런 관계를 표현할 수 있습니다. 이렇게 설계하면 User가 속한 Group을 찾는 것도 쉬워집니다. 기본적으로 SQL 쿼리나 JPA의 메소드로 가능합니다. 또한 'User'가 동일한 'Group'에 여러 번 속하는 것을 막기 위해 `User_Group` 테이블에서 user_id와 group_id 컬럼을 합쳐 고유한 키(unique key)를 만드는 것도 고려해보세요.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!