월하점
월하점의 개발 공부 일지
월하점
전체 방문자
오늘
어제
  • 분류 전체보기 (96)
    • Back-end (3)
    • PROJECT (1)
    • CS (15)
      • Operating System (0)
      • Network (4)
      • Data Structure (7)
      • Algorithm (0)
      • Database (4)
    • Problem Solving (52)
    • Programming Languages (1)
      • Javascript (0)
      • Python (1)
      • JAVA (0)
    • Codestates BEB 4기 (7)
    • Blockchain (12)
    • Linux (2)
    • Git (1)
    • 잡다한 (2)

공지사항

인기 글

태그

  • Python
  • javascript
  • django
  • SWEA
  • 자료구조
  • 프로그래머스
  • node.js
  • 알고리즘
  • CS
  • baekjoon
  • 네트워크

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
월하점

월하점의 개발 공부 일지

  • HOME
  • GUEST
  • WRITE
인스타그램 (Instagram) 스키마 디자인 - 관계형 데이터베이스로 설계
CS/Database

인스타그램 (Instagram) 스키마 디자인 - 관계형 데이터베이스로 설계

2022. 5. 25. 23:37

인스타그램은 사진을 업로드하고, 사람들이 서로 댓글을 달며 서로 follow 관계를 만들 수 있는 사진 SNS 서비스이다.

인스타그램의 간단한 기능들을 구현하기 위해 데이터베이스의 스키마를 디자인하는 실습 과정을 거쳤다.

이번 포스팅에서는 그 과정을 기록한 노션 글을 마이그레이션 한다.

 


인스타그램 주요 기능 정의

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

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

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

게시물이 업로드되면 다른 사용자는 이 게시물에 댓글(E)을 달 수 있고, 좋아요(B) 를 눌러 관심을 표할 수 있습니다.

3. 해시태그 기능

게시물에 #감성 #맛집 등의 해시태그(D)를 남길 수 있으며, 이 해시태그를 누르면 이 해시태그가 사용된 모든 게시물을 한 데 모아 볼 수 있습니다.

4. follow 기능

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

 


 

위와 같은 기능을 구현하기 위한 스키마를 설계할 것이다.

스키마 설계를 위한 단계는 다음과 같은 방식으로 진행했다.

 

1. 스키마 설계 단계

  1. 모델 요구사항 분석
  2. 분석한 요구사항에서 엔티티를 추출한다
  3. 각 엔티티가 가질 수 있는 속성들을 뽑아낸다
  4. 속성들 중 따로 엔티티로 뽑아내고 관계를 가질 수 있는 것들을 골라낸다 (정규화)
  5. ER 다이어그램을 그려보면서 Entity간의 관계를 정한다
  6. 테이블로 변환한다

 

1) 요구사항 분석

  * 엔티티로 추출할 것은 오렌지 색으로 표시했다

 

사용자:

  • 게시물을 작성할 수 있다
    • 게시물:
      • 게시물에는 여러 개의 사진을 올릴 수 있다
      • 사진 업로드와 함께 사진을 설명하는 간단한 글이 올라간다
  • 댓글을 달 수 있다
    • 댓글:
      • 게시물에 댓글을 달 수 있다
      • 다른 사용자와 작성자 모두 가능하다
  • 좋아요를 누를 수 있다
    • 좋아요:
      • 사용자는 게시물에 대한 좋아요를 누를 수 있다
  • 해시태그를 남길 수 있다
    • 해시태그:
      • 게시물에 여러 개의 해시태그를 남길 수 있다
      • 해시태그를 누르면 해시태그가 사용된 모든 게시물을 모아 볼 수 있다
  • 팔로우를 할 수 있다
    • 팔로우:
      • 팔로워가 있고 (팔로우하는 사람 / 팔로우의 주체)
      • 팔로잉이 있다 (팔로우 당하는 사람 / 팔로우의 대상)

 

2) 엔티티와 속성 추출

해당 테이블의 고유 속성 / 관계를 통해 이어질 속성

 

3) 엔티티 간의 관계 추출

Entity  Attribute  Entity → Table
사용자 id, 계정아이디, 이메일, 닉네임, 팔로워, 팔로잉, 좋아요, 게시물, 댓글 users
게시물 id, 작성자, 작성시간, 설명글, 사진, 해시태그, 댓글, 좋아요 posts
사진 id, 사진경로, 게시물id photos
댓글 id, 작성자, 작성내용, 게시물id, 작성시간 comments
좋아요 id, 사용자id, 게시물id, 생성시간 likes
해시태그 id, 태그내용, 게시물id hashtags
팔로우 id, 팔로워, 팔로잉, 생성시간 follow

 

관계  관계 참여하는 Entity  관계 유형
작성(게시물) 사용자 : 사용자는 여러 개의 게시물을 올릴 수 있다
게시물 : 하나의 게시물은 하나의 사용자만 올릴 수 있다
사용자:게시물 = 1:N
작성(댓글) 사용자 : 사용자는 여러 개의 댓글을 달 수 있다
댓글 : 하나의 댓글은 하나의 사용자만 작성할 수 있다
게시물 : 게시물에는 여러개의 댓글이 달릴 수 있다
사용자:댓글 = 1:N
게시물:댓글 = 1:N
업로드(사진) 사진 : 하나의 사진은 하나의 게시물에만 업로드된다
게시물 : 하나의 게시물에는 여러 개의 사진이 업로드될 수 있다
게시물:사진 = 1:N
좋아요 사용자 : 사용자는 여러 개의 좋아요를 누를 수 있다
좋아요 : 좋아요는 사용자와 게시물의 정보를 갖는다
게시물 : 하나의 게시물에는 여러 개의 좋아요가 있을 수 있다
사용자:좋아요 = 1:N
게시물:좋아요 = 1:N
팔로우 팔로워 : 팔로우(구독)하는 사용자 (팔로우의 주체)는 여러명일 수 있다
팔로잉 : 팔로우(구독)당하는 사용자 (팔로우의 대상)는 여러명일 수 있다
팔로워:팔로잉 = N:M
해시태그 해시태그 : 하나의 해시태그에는 여러 개의 게시물이 연결될 수 있다
게시물 : 하나의 게시물에는 여러 개의 해시태그가 작성될 수 있다
해시태그:게시물 = N:M

→ 해시태그의 경우 join 테이블을 만들어서 N:M 구현할 것

 

 

2. 결과

그래픽 UI로 클릭하는 것보다 타이핑이 더 편해서 https://dbdiagram.io/ 을 이용해 스키마를 작성했다.

저작자표시 비영리 변경금지 (새창열림)

'CS > Database' 카테고리의 다른 글

[SQL] TestDome Solution - Users And Roles  (0) 2022.09.19
[SQL] TestDome Solution - Workers  (1) 2022.09.16
트랜잭션의 특성 - ACID  (0) 2022.05.12
    'CS/Database' 카테고리의 다른 글
    • [SQL] TestDome Solution - Users And Roles
    • [SQL] TestDome Solution - Workers
    • 트랜잭션의 특성 - ACID
    월하점
    월하점
    개발 공부를 기록합니다. 웹을 위주로 공부하며 컴퓨터과학 이론도 함께 정리할 계획입니다.

    티스토리툴바