본문 바로가기

개발일지/프로젝트

[4주 프로젝트] 3. DB Schema 작성

 

와이어프레임을 작성하면서 웹 서비스에 넣을 기능들을 생각했고, 그걸 바탕으로 팀원들과 DB 스키마를 작성하였다.

 

2주 프로젝트에서도 DB스키마를 작성할 때 참여는 하였지만,

어떻게 DB스키마를 작성하는지 감이 잘 오지 않아 적극적으로 의견을 내기보다는 팀원들이 하는걸 보고 이해하는 정도였다.

 

2주 프로젝트때 이해한 걸 바탕으로

이번 4주프로젝트에서는 DB스키마를 작성하는데 적극적으로 의견을 내고 툴을 사용하여 직접 작성하였다.

참고로, 사용한 툴은 dbdiagram.io이다.

(정말 편하고, 이런 툴을 무료로 사용할 수 있음에 너무나도 감사하다!)

https://dbdiagram.io/home

 

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 스키마는 아래와 같다.