현재 개발자 사이드 프로젝트 팀 매칭을 하고
매칭한 팀끼리 멘토링 받을 수 있는 플랫폼을 제작하고 있습니다
고민의 발단
ERD를 설계중에 고민이 되었다. . .
우리 프로젝트에는 멘토와 멘티가 있는데 이 둘을 어떻게 테이블로 관리 해야 할까..?
아이디어
떠오르는 방법은 2가지 였다
1번. user 테이블을 만들고 이 테이블을 상속받는 자식 테이블 mentor와 mentee를 두면 어떨까?
2번. user 테이블에 mentor 정보와 mentee 정보를 모두 넣고 column으로 멘토와 멘티를 구분 하면 어떨까?
분석
고민 끝에 각자 방법의 장단점을 적어보면서 의사결정을 하기로 하였다.
(1번 - 자식 테이블 만들기)
장점: 정규화가 잘되어 null인 column 값이 적다
단점: 테이블이 3개 -> 멘토, 멘티 정보를 불러올때마다 테이블을 join 해야함 (성능이 bad ~)
(2번 - column으로 멘토-멘티 구분하기)
장점 : 테이블이 1개다
단점 : 정규화 하지 않은 것이기 때문에 null인 column이 생긴다
결론
꽤 긴 고민 끝에 내가 내린 결론은 2번 (user 테이블만 사용하기) 다.
이유
1. 기획 내용을 둘러보다 보니 멘토, 멘티로써 구분 해야 할 column이 생각보다 많이 없었다. 그래서 정규화를 하지 않아서 몇개의 column이 null로 남는 것은 감안하기로 하였다.
2. 기획 한 피그마를 보니까 user 테이블이 필요할때 mentor나 mentee 테이블도 함께 join 하여 불려 가야할 상황이 많이 생길 것 같았다.
mentor 테이블엔 멘토를 인증한 정보(ex. 카카오 재직자, 백엔드 3년차)를 column에 넣으려고 했는데
멘토링 페이지에 모달창을 보면 user 정보와 함께 mentor의 정보도 함께 사용되는것을 볼수 있다.
메인페이지도 user 정보와 함께 mentor의 정보도 함께 사용함으로써 Join을 해야한다.
'Side Match' 카테고리의 다른 글
[SW마에스트로] 프로젝트 중 설계한 예외 처리 아키텍쳐 (0) | 2023.08.29 |
---|---|
[SW마에스트로] 복잡한 DTO 처리하기 (feat. queryDSL, 한방 쿼리) (0) | 2023.07.29 |
[SW마에스트로] 프로젝트 삭제를 어떻게 구현해야 할까? (0) | 2023.07.28 |
[SW마에스트로] AWS 미리 짚어보기 - 초급 (0) | 2023.05.03 |
[SW마에스트로] 코딩 테스트 문제 유형 정리 (0) | 2022.07.16 |