와이어프레임을 작성하면서 웹 서비스에 넣을 기능들을 생각했고, 그걸 바탕으로 팀원들과 DB 스키마를 작성하였다.
2주 프로젝트에서도 DB스키마를 작성할 때 참여는 하였지만,
어떻게 DB스키마를 작성하는지 감이 잘 오지 않아 적극적으로 의견을 내기보다는 팀원들이 하는걸 보고 이해하는 정도였다.
2주 프로젝트때 이해한 걸 바탕으로
이번 4주프로젝트에서는 DB스키마를 작성하는데 적극적으로 의견을 내고 툴을 사용하여 직접 작성하였다.
참고로, 사용한 툴은 dbdiagram.io이다.
(정말 편하고, 이런 툴을 무료로 사용할 수 있음에 너무나도 감사하다!)
dbdiagram.io - Database Relationship Diagrams Design Tool
dbdiagram.io
먼저 팀원들과 우리 웹서비스의 기능에 맞게 어떤 테이블이 존재해야 하는지,
그리고 테이블간의 관계가 어떤지, 1:N 관계인지 N:M 관계인지 같이 논의해보았다.
우리 웹어플리케이션의 대표 서비스는 병원리뷰를 작성하는 것이고,
꼭 병원에 가지 않아도 간단한 질문글을 올리고 전문의에게 답변을 받을 수 있는 서비스도 구현할 예정이었다.
이를 바탕으로 아래와 같이 테이블을 구성하였다.
1/ 일반 유저들의 정보를 저장할 users 테이블
회원가입 시 유저로부터 닉네임, 이메일, 비밀번호를 받고, 프로필사진도 지정할 수 있도록 할 예정이었다.
또한, 관리자 계정도 따로 만들 계획이어서 일반유저와의 구분을 짓기위한 컬럼도 필요했다.
그래서 아래와 같이 만들었다.
2/ 의사는 의사면허번호 등 정보를 따로 받아야 하니 doctors 테이블,
의사는 이메일, 이름 등 뿐만 아니라 의사면허번호도 받고, 회원가입을 하더라도 관리자에 의해 승인을 받아야 로그인을 할 수 있도록 구현하기 위해 users테이블에 저장하지 않고 별개로 doctors 테이블을 만들었다.
3/ 병원 리뷰를 작성하면 저장할 reviews 테이블
영수증 사진(receipts_img), 리뷰 내용(content), 병원 이름(hospital_name), 그리고 users테이블과 join하여 유저 정보를 가져오기 위한 작성자id(users_id) 컬럼을 추가하였다.
4/ 일반 유저들이 질문을 올리면 저장할 qna 테이블
질문 제목(title), 질문 내용(content), 진료과목 카테고리(category), 그리고 users테이블과 join하여 유저 정보를 가져오기 위한 작성자id(users_id) 컬럼을 추가하였다.
5/ 질문에 같이 적을 수 있는 해시태그들을 저장할 hashtag 테이블
hashtag테이블 컬럼은 간단하게 id와 hashTag 컬럼만 추가하였다.
6/ 질문에 대한 답변을 저장할 comments 테이블
comments 테이블은 답변에 해당하는 질문정보를 qna 테이블과 join하여 가져오기위한 질문id(qna_id),
답변 내용(content),
그리고 doctors 테이블과 join하여 작성한 의사의 정보를 가져오기 위한 의사 id(doctors_id) 컬럼을 추가하였다.
7/ 병원 정보들을 저장할 hospital 테이블
마지막으로 hospital 테이블은 병원 이름(hospital_name), 병원 사진(hospital_img), 병원정보(hospital_info) 컬럼들을 추가하였다.
이렇게 총 7개의 테이블을 만들었다.
테이블간 관계를 정하는게 좀 힘들었다.
그래서 교육들을때 공부한 방법을 이용하였다.
users테이블과 qna테이블을 예시로 들면,
유저 한명은 질문이 여러개일수 있지만, 질문 한개에는 유저가 여러 명일 수 없다.
그래서 users테이블 : qna테이블은 1:N 관계.
반면, qna테이블과 hashtag테이블을 살펴보자.
질문 한개에 해시태그가 여러개일 수 있다.
반대로 해시태그 입장에서 봐도, 해시태그 하나에 질문이 여러개일 수 있다.
(인스타그램을 보면, 하나의 게시물에 #맞팔, #좋아요 등 해시태그를 여러개 적을 수 있고,
#맞팔 해시태그를 눌러보면 수백개의 #맞팔 해시태그를 적은 게시물들을 볼 수 있다.)
이렇게 완성된 우리 프로젝트의 DB 스키마는 아래와 같다.
'개발일지 > 프로젝트' 카테고리의 다른 글
[4주 프로젝트] 4. 프로토타입 작성 (0) | 2022.02.02 |
---|---|
[4주 프로젝트] 2. 와이어프레임 작성 (0) | 2022.01.31 |
[4주 프로젝트] 1. 프로젝트 아이디어 기획 (0) | 2022.01.31 |
[4주 프로젝트] 4주차. 2022. 01. 20. 목요일 (0) | 2022.01.20 |
[4주 프로젝트] 4주차. 2022.01.19. 수요일 (0) | 2022.01.19 |