Entity Relations / 패스트캠퍼스 챌린지 10일차

망고쥬스·2021년 11월 10일
1

연관관계 개요 및 ERD 알아보기

User라는 정보가 Relation이 없다면 Book에서 'martin'이라는 정보가 들어가야하고
Review에서 'martin이라는 정보가 또 들어가야 한다
'martin'이라는 정보가 유일하지 않고 만약 동명이인이 존재한다면 정의하기가 힘들어 진다
'martin'이라는 사람이 개명해서 'steve'라는 정보가 변경된다면 모든 테이블에 있는 'martin'이라는 정보를 'steve'로 변경해주어야 할 것이다
이럴 때 사용하는 것이 Relation이 되겠다.

User 테이블이 id가 1이라는 정보에는 'martin이 등록되어 있다.
다른 테이블에서는 userId가 1이라는 참조키만을 가지게 된다.
해당 유저가 연관성이 있다는 정보만 가지게 되는 것이다.
또한 'martin'이 'steve'로 개명을 하였다면 user테이블에서의 'martin'만 'steve'로 변경시켜주면 된다.

이와 같이 관계형 DB에서는 여러가지 장점이 있으며 대표적으로 데이터를 저장하는 방식으로 사용하고 있다.

객체간의 Relation을 만들어 줘 봅시다.
Entity Relationship Diagram : ERD
Entity는 양방향으로 참조하게 되는 경우가 많이 있다.
자칫 잘못하면 enetity의 관계가 복잡해져서 유지보수에 어려움이 따르기 때문에 설계 전 ERD를 통해 구체적인 설계를 해보는게 좋다.

우리가 지금까지 만들었던 Entity를 ERD로 만들어 보도록 하겠다.

사용 툴은 draw.io 라는 툴을 사용한다.

user 테이블과 user_history테이블은 1:다 관계 : user데이터 생성기록을 저장해놓음
user 테이블과 review테이블은 1:다 관계 : 유저 한명이 여러가지 리뷰를 작성할 수 있다
review 테이블과 book테이블은 다:1 관계 (다만 review는 없을수도 있다) : 책 한권에 여러명의 리뷰를 남길 수 있다
book 테이블과 publisher테이블은 다:1 관계 : 한 출판사에서 여러가지 책을 담당한다
book 테이블과 author테이블은 다:다 관계 : 작가 한명이 여러책을 쓸 수도, 책 또한 여러 작가가 공동 집필 할 수 있다


1:1 연관관계 알아보기

현업에서는 1:1 연관관계를 갖는 테이블을 많이 존재하게 된다
도메인 성격에 따라 나누다 보면 1:1 갖는 경우도, 혹은 트래픽을 많이 받는 결제나 주문 테이블의 경우 서비스를 중단하고 테이블을 수정할 수 없는 경우가 많아
지속적으로 서비스를 하면서 속성을 추가하는 방식으로 1:1 연관관계를 맺는 테이블을 추가함으로서 문제없이 속성을 추가하는 경우가 빈번하다.
트래픽을 받는 서비스를 이해하지 않으면 어려울 수 있다.

사실 위에서 만든 ERD에서는 1:1관계를 맺은 테이블이 존재하지 않는다.
1:1 관계를 갖는 book_review_info 테이블을 만들어 보고자 한다.
book_review_info 테이블의 경우 리뷰에 관련 된 스코어라던가 기타 간단한 정보를 review테이블에서 가져올 순 있지만,
항상 review에 관련된 정확한 정보가 필요한 것이 아니다. 항상 모든 정보를 가져오게 된다면 가져와야 하는 데이터 정보가 많아 지게 된다. (성능이슈발생)
해서, 주기적으로 해당 테이블을 계산하서 별도의 테이블인 'book_review_info' 에 저장을 해 두고, book 테이블과 1:1 조인을 통해 계속 보여줄 수 있도록 설계해보겠다.

book_review_info 테이블의 속성은 다음과 같다.
average_review_score : 리뷰 평점 (score를 가져와서 평균치를 산출)
review_count : 리뷰의 갯수
book_id : book테이블과 1:1 관계를 맺기위한 어떤 책이냐에 대한 정보


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글