React-nodebird (8) - MySQL, 시퀄라이즈 , 데이터베이스 모델

장택진·2022년 11월 2일
0

React-nodebird

목록 보기
8/15

MySQL을 쓰는 이유

우리가 만드는 프로젝트는 SNS이기 때문에 User와 Post간의 관계가 있고, 사용자가 쓴 댓글은 User와 Comment간의 관계가 있다. 각 모델간의 관계가 많기 때문에 관계형 데이터베이스인 MySQL을 사용한다.

사실 거의 모든 데이터는 관계형 데이터베이스를 쓰는게 맞다....

시퀄라이즈는 자바스크립트 코드를 SQL로 바꿔주는 라이브러리다.

위 사진은 post의 모델링이다. 각 궁금한 것은 주석에 다 적어놨다.

데이터베이스 관계 설정

사진에서 보면 데이터베이스 관계에서 주석을 적어놓은게 있는데 관계를 설정하여 저 코드들을 사용할 수 있다는 것이다.
관계는 크게 두가지로 나뉜다.

  • 1대다(1:N) 관계 => hasMany, belongTo

  • 다대다(N:M) 관계 => belongsToMany, belongsToMany

    다대다(N:M) 관계는 중위 사진처럼 중간테이블이 생긴다.

    해시태그를 클릭하면 관련 게시글들이 나오고, 게시글들에도 해시태그들이 여러개 작성할 수 있기때문에 이를 다대다(N:M)관계라 부른다. 이 다대다(N:M)관계는 중간 테이블이 생긴다.

    hashtagId가 1인 노드 해시태그를 가지고있는 게시글을 찾아오려면 hashtagId가 1인 것과 1을 가지고 있는 PostId를 찾아서 해당글을 검색해오게된다.

만약 지니의 팔로워를 찾으려면 팔로잉ID의 지니를 먼저 찾고 , 팔로워ID를 찾게 된다.
따라서 foreignKey를 이용하여 Follower에서는 FollowingID를 먼저 찾고, FollowerID를 찾게 됩니다.

foreignKey를 쓰는 이유 : foreignKey를 쓰지 않으면, followingID, followerID가 userID, userID로 칼럼명이 같아져 혼선이 생기므로 변경해줍니다.

이런식으로 모델들을 기획한대로 세팅을 해놓고 index에 가서 불러온 뒤 sequelize 함수를 통해 각 모델 파일 내부를 실행되게 해줍니다.

profile
필요한 것은 노력과 선택과 치킨

0개의 댓글