티스토리 뷰
요구사항 분석
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를 설계하는 것을 실습한 적이 있는데 이번 코드스테이츠를 수강하면서 다시 설계해보니 한층 성장했다는 생각이 든다. 그 중간사이에 프로젝트를 하면서 궁금증이 다대다 관계에서 속성에 배열값으로 줘도 되는지 고민했었는데 Relation을 하나 생성하고, 그 생성한 Relation에 id를 부여하는 것이 더 좋은 방법이었다.
'Database' 카테고리의 다른 글
[QueryDsl] fetchCount() 가 deprecated 되었다. (2) | 2024.08.28 |
---|---|
[Database] 트랜잭션(Transaction)에 대해서 (1) | 2023.10.13 |
[Database] MySQL : PART1 (0) | 2022.12.05 |
[Database] schema란? (0) | 2022.12.02 |
- Total
- Today
- Yesterday
- githubactions
- EC2
- LeetCode
- Hibernate
- network
- CodeDeploy
- 네트워크
- entitylisteners
- appliationeventlistener
- Route53
- 프로그래머스
- java
- CI와 CD의 차이
- Spring
- aws
- DevOps
- IAM
- 영속성 컨텍스트
- 트랜잭션
- 자바
- fetchcount()
- persistencecontext
- 정렬
- JPA
- springboot
- 지연 대기열
- CI/CD
- 영속 상태
- acm
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |