DB 설계 - boostcamp-2020/Project12-B-Slack-Web GitHub Wiki

요구사항 분석

System

  • System은 한 개의 워크스페이스를 가진다.

User

  • User는 아이디, 비밀번호, 프로필 사진, 풀네임, 디스플레이네임, 자기소개, 핸드폰 번호, 소셜 아이디 여부를 가진다.
  • User는 다수의 chatRoom에 속할 수 있다.
  • User는 속한 chatRoom의 보여지는 섹션을 정할 수 있다.
  • User는 chatRoom의 알림 여부를 정할 수 있다.
  • User는 다른 User과의 DM을 주고 받을 수 있다.

chatRoom

  • 채팅방은 속해있는 제목, 공개 여부, 채팅타입, 토픽 한 정보를 가진다.
  • 채팅방은 여러 회원을 가질 수 있다.
  • 공개여부 정보는 다른사람에게 보여지는 public과 보여지지 않은 private을 가진다.
  • 채팅타입 정보는 channel, DM, Thread으로 나뉜다.
  • 채팅방은 여러 개의 message를 가진다.
  • 채팅방은 pin한 내용에 대한 정보를 가진다.

message

  • message은 여러 reaction을 가질 수 있다.
  • message은 작성 시간, 작성자, 내용 정보를 가진다.
  • message는 여러 파일을 가질 수 있다.
  • message은 한 개의 thread를 가진다.

thread

  • thread는 여러 개의 reply을 가진다.

reply

  • reply는 여러 reaction을 가질 수 있다.
  • reply는 내용, 작성자 정보, 작성시간을 가진다
  • reply는 여러 파일을 가질 수 있다.

reaction

  • reaction은 제목과 이미지를 가진다.

file

  • file은 URI 정보를 가진다.

후보 개체 선정

  • User
  • ChatRoom
  • Message
  • Thread
  • Reply
  • Reaction
  • File

후보 관계 선정

관계 타입 속성
user-chatRoom n:m 섹션, 알림여부
chatRoom-message 1:n 핀여부
message-file 1:n
message-reaction 1:n
message-thread 1:1
thread-reply 1:n
reply-reaction 1:n
reply-file 1:n

검토

  • 1:1 관계를 가지고 있는 message-thread 관계에서 thread에 대해 많은 속성을 가지지 않기에 릴레이션을 생성하지 않고 추후 message와 reply의 1:n 관계를 생성해 속성명을 thread로 관리하는 것이 좋다고 판단

최종 개체 선정

  • User
  • ChatRoom
  • Message
  • Reply
  • Reaction
  • File
  • Section

최종 관계 선정

관계 타입 속성
user-Section 1:n
user-chatRoom n:m 섹션, 알림여부
chatRoom-message 1:n 핀여부
message-file 1:n
message-reaction 1:n
message-reply 1:n
reply-reaction 1:n
reply-file 1:n

ERD

ERD