seminar-2020 icon indicating copy to clipboard operation
seminar-2020 copied to clipboard

다대다에서 맵핑테이블을 설정하는 이유 관련 질문

Open GanziDaeyong opened this issue 4 years ago • 0 comments

잘못된 생각(?) 으로 하루를 꼬박 날리고 세미나장님께 질문한 내용입니다.

다대다를 단지 "추상적으로 이어주는 관계" 정도로만 받아들이고, 결국 실제 데이터를 건드리는 행위는 User과 Seminar 객체를 통해 이루어져야 한다고 생각했습니다. 달리 말하면, User <---- UserSeminar ----> Seminar 의 관계에서 User객체에 foreign key (엄밀히 말하면 역참조.)로 걸려있는 participant와 instructor 가 Seminar 객체에도 똑같이 들어가야 한다고 생각했습니다. 그래야 Seminar만 보더라도 쉽게 participant와 instructor을 가져올 수 있을테니까요.

그런데 이렇게 설정해버리면 애초에 UserSeminar객체를 생성하는 의미가 없어집니다. 단지 자기에게 필요한 필드에 foreign key를 걸어 객체를 생성하는 것과 다를 게 없습니다. 즉, 다대다 관계를 설정하기도 어려워지고, 각각의 데이터를 두번 씩 중복하여 저장하는 꼴이니 아주 비효율적입니다.

seminar.UserSeminar.filter(조건) 과 같은 식으로 접근하면, 맵핑테이블 객체를 한번 찍어주기만 하면 끝나는 일이었습니다.

GanziDaeyong avatar Sep 27 '20 07:09 GanziDaeyong