[내일배움캠프 Spring 4기 - 칸반보드 프로젝트] 77일차 TIL - 연관관계 없이 테이블 설계
오늘의 학습 코드
📕연관관계 없이 테이블 설계
- 이번 프로젝트의 주제는 칸반보드이다. 트렐로를 많이 참고했다.
- 필수 구현 사항은 다음과 같다.
- 사용자 관리 기능
- 보드 관리 기능
- 컬럼 관리 기능
- 카드 관리 기능
- 카드 상세 기능
- [ ] 댓글 달기
- 협업하는 사람들끼리 카드에 대한 토론이 이루어질 수 있어야 합니다.
- [ ] 날짜 지정
- 카드에 마감일을 설정하고 관리할 수 있어야 합니다.
- 나는 컬럼 관리 기능, 카드 관리 기능, 날짜 지정 기능을 맡았다.
📕연관관계 없이 테이블 설계
- 이번 프로젝트에서는 @ManyToOne과 같은 어노테이션을 사용해서 연관관계를 매핑하는 방식이 아닌 연관관계를 끊고 진행해보자는 의견이 나왔다.
- 원래의 그동안 진행했던 프로젝트에서는 어노테이션을 통해 객체를 참조했다.즉, Board 객체가 User 객체를 참조한다면 Board 객체안에는 @ManyToOne으로 User 객체가 존재한다.
- 이번 프로젝트에서 진행하고자 하는 방식은 Board 객체는 User 객체를 참조하지만 UserId를 컬럼으로 가지고 있는 방식이다.
- 어노테이션을 적용하는 방식은 강한 결합으로 객체 참조를 통한 탐색 방법과 객체를 삭제하고자 할 때, 연관된 객체가 먼저 삭제 되어야 삭제하고자 하는 객체를 삭제할 수 있다는 점이 비효율적이라고 생각했다. 애초에 객체를 참조하는 것은 제약 조건이기 때문이다.
- 반면에, 참조하는 객체의 Id 값을 컬럼으로 가지고 있으면 약한 결합으로 repository를 통해서 탐색해야하며 객체를 삭제하고싶을 때 등 제한 조건이 없다.
- 위와 같은 의논을 거쳐 완성된 ERD는 아래와 같다. 테이블 간의 선은 테이블 간의 관계를 이해하기 쉽게 하기 위해 그었다.