Database

[Database] 인스타그램 Relational Schema 실습

강서월 2022. 12. 2. 16:56

요구사항 분석

1. 게시물(Post) 작성 기능

인스타그램에서는 여러 개의 사진(A)을 올릴 수 있다. 사진을 업로드할 때, 사진을 설명하는 간단한 글(C)이 올라간다.

 

2. 게시물에 댓글 달기 및 좋아요 기능

게시물이 업로드되면 다른 사용자는 이 게시물에 댓글(E)을 달 수 있고 대댓글도 달 수 있으며, 댓글, 대댓글, 게시글에 좋아요(B) 를 눌러 관심을 표할 수 있다. 이 세가지 모두 누가 행위를 했는지 알 수 있다.

 

3. 해시태그 기능

게시물에 해시태그(D)를 남길 수 있으며, 이 해시태그를 누르면 이 해시태그가 사용된 모든 게시물을 한 데 모아 볼 수 있다.

 

4. follow 기능

인스타그램에서 친구 관계는 팔로워(follower)와 팔로잉(following)으로 나뉩니다. 김코딩이 최해커를 following 하면, 최해커의 피드가 김코딩의 홈 화면에 나타납니다. 최해커의 입장에서는 김코딩이 follower로 추가됩니다.

 

Relational Schema

- post <-> photo (1)

: post는 여러개의 photo와 관계를 맺을 수 있지만, photo는 여러개의 post와 관계를 맺을 수 없으므로 post와 photo는 1 : N 관계이다.

photo는 post의 postId PK를 FK로 갖는다.

 

- post <-> content (1)

: post는 한개의 content와 관계를 맺고, content도 한 개의 post와 관계를 맺는 1:1 관계이므로 post의 속성으로 content를 갖는다.

 

- post <-> postlike (2)

: post는 여러개의 좋아요와 관계를 맺고, 좋아요 각각의 postlike는 한개의 post와 관계를 맺기 때문에 post : postlike=1:N관계이다.

 

- post<-> comment (2)

: post는 여러개의 댓글과 관계를 맺고, 댓글 comment는 한개의 post와 관계를 맺기 때문에 post:comment = 1 : N관계이다.

 

- comment <-> recomment(2)

: comment는 여러개의 recomment와 관계를 맺고, recomment는 한개의 comment와 관계를 맺기 때문에 comment:recomment= 1:N 관계이다.

 

- commnet <-> commentLike(2)

: comment는 여러개의 commentLike를 받을 수 있고, commentLike는 한개의 comment와 관계를 맺기 때문에 post:comment = 1 : N관계이다.

 

- recommnet <-> recommentLike(2)

: recomment는 여러개의 recommentLike를 받을 수 있고, recommentLike는 한개의 recomment와 관계를 맺기 때문에 recomment:recommentlike = 1 : N관계이다.

 

- postlike, comment, commentlike, recomment, recommetlike <-> user(2)

: user는 위에 나열된 것들을 여러개와 관계를 맺을 수 있지만, 나열된 것들의 각각의 요소는 한개의 user와 관계를 맺기 때문에 user : ~ = 1 : N 관계이다.

 

- post <-> tag (3)

:  post는 여러개의 tag와 관계를 맺고, tag도 여러개의 post와 관계를 맺으므로 post와 tag는 N:M 관계이다. 두 개의 테이블과 1:N 관계를 형성하는 새로운 테이블로 N:M 관계를 형성한다. 이렇게 조인 테이블을 생성하더라도 조인 테이블을 위한 기본키 ptId를 생성한다.

 

- follow (4)

 

작성한 relational Schema

 


대외 동아리에서 인스타그램 Relational Schema를 설계하는 것을 실습한 적이 있는데 이번 코드스테이츠를 수강하면서 다시 설계해보니 한층 성장했다는 생각이 든다. 그 중간사이에 프로젝트를 하면서 궁금증이 다대다 관계에서 속성에 배열값으로 줘도 되는지 고민했었는데 Relation을 하나 생성하고, 그 생성한 Relation에 id를 부여하는 것이 더 좋은 방법이었다.