사용자 관련 요구 사항
- 카카오 소셜 로그인을 구현 할 예정이다.
- 회원 탈퇴 기능이 필요하다.
- 이름, 닉네임, 전화번호, 성별이 필요하다.
책 관련 요구 사항
- 사용자가 책 여러 권을 대여할 수 있다.
- 책은 하나의 카테고리가 있다.
- 책은 제목, 설명에 대한 정보가 필요하다.
- 책 소개 페이지에 해시태그가 붙을 수 있고,
책 한 권에 해시태그 여러 개가, 해시태그 하나가 여러 책에 붙을 수 있다.
- 사용자가 책 설명 페이지에서 책에 좋아요를 누를 수 있다.
- 책 카테고리 별로 현재 몇 개의 책이 있는지 집계가 필요하다.
알림 관련 요구 사항
- 알림은 공지 관련 알림, 책 반납 시간 임박 알림, 마케팅 알림이 있을 수 있다.
아래는 요구사항에 대한 나의 테이블 설계도이다.
<소셜로그인 테이블>
소셜아이디
사용자아이디(pk)
<사용자 테이블>
사용자아이디(pk)
닉네임
전화번호
성별
활성화 여부
<책 테이블>
책 아이디(pk)
카테고리
제목
설명
<해시태그>
태그아이디(pk)
태그이름
<책-태그 테이블>
책아이디(fk)
태그아이디(fk)
<사용자-책 좋아요 테이블>
사용자아이디(fk)
책아이디(fk)
<알림 테이블>
알림아이디(pk)
알림 카테고리(종류: 공지, 반납 시간 임박, 마케팅)
알림 내용
user 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| name | varchar(20) | |
| gender | enum('m', 'w', 'none') | |
| birth | bigint | |
| address | varchar(200) | |
| point | bigint | default 0 |
| social_type | varchar(20) | |
| social_id | bigint | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
agree 테이블 (이용약관)
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| title | text | |
| detail | text | |
| essential | enum('necessary', 'unnecessary') | 필수 여부 |
user_agree 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| user_id (FK) | bigint | |
| agree_id (FK) | bigint | |
food_category 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| name | varchar(50) | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
favorite_food 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| user_id (FK) | bigint | |
| food_id (FK) | bigint | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
restaurant 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| name | varchar(100) | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
mission 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | 사장님 구분 번호 |
| restaurant_id (FK) | bigint | |
| point | int | |
| deadline | date | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
user_mission 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| user_id (FK) | bigint | |
| mission_id (FK) | bigint | |
| status | enum('progress', 'complete') | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
review 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| user_id (FK) | bigint | |
| restaurant_id (FK) | bigint | |
| rating | float | |
| body | text | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
review_image 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| review_id (FK) | bigint | |
| image_url | text | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |
user_point 테이블
| 칼럼명 | 타입 | 비고 |
|---|
| id (PK) | bigint | |
| user_id (FK) | bigint | |
| restaurant_id (FK) | bigint | |
| mission_id (FK) | bigint | |
| point | bigint | |
| created_at | datetime(6) | |
| updated_at | datetime(6) | |