A Free Database Designer for Developers and Analysts
Table user {
id int [pk, increment, note: '유저 고유 ID']
nickname varchar [note: '유저 닉네임']
cooking_level varchar [note: '요리 실력 (초보자, 숙련자, 전문가)']
household_type varchar [note: '가구 형태 (1인 가구, 2인 가구, 3인 이상, 기타)']
job varchar [note: '직업 (학생, 주부, 직장인, 무직, 자영업자, 기타)']
social_login_id int [ref: > social_login.id, note: '소셜 로그인 정보 참조']
created_at datetime [note: '생성일시']
updated_at datetime [note: '수정일시']
note: '유저 테이블'
}
Table social_login {
id int [pk, increment, note: '소셜 로그인 고유 ID']
type varchar [note: '소셜 로그인 제공자 (카카오, 네이버, 애플 등)']
sid varchar [note: '소셜 제공자가 발급한 고유 식별자']
created_at datetime
updated_at datetime
note: '소셜 로그인 정보 테이블'
}
Table recipe {
id int [pk, increment, note: '레시피 고유 ID']
title varchar [note: '레시피 제목']
description text [note: '레시피 간단 소개']
duration varchar [note: '소요 시간 (ex. 30분, 1시간 등)']
level varchar [note: '난이도 (초급, 중급, 고급)']
main_ingredients text [note: '메인 재료 (쉼표로 구분된 태그 형태)']
seasoning text [note: '조미료 (쉼표로 구분된 태그 형태)']
type varchar [note: '레시피 타입 (simple, step-by-step)']
views int [note: '조회수']
created_by int [ref: > user.id, note: '레시피 작성자 참조']
main_category_id int [ref: > main_category.id, note: '상위 카테고리 참조']
sub_category_id int [ref: > sub_category.id, note: '하위 카테고리 참조']
created_at datetime
updated_at datetime
note: '레시피 테이블'
}
Table recipe_image {
id int [pk, increment, note: '레시피 이미지 고유 ID']
recipe_id int [ref: > recipe.id, note: '레시피 참조']
image_url varchar [note: '레시피 이미지 (S3 경로 등)']
created_at datetime
updated_at datetime
note: '레시피 완성 사진 테이블'
}
Table main_category {
id int [pk, increment, note: '메인 카테고리 고유 ID']
name varchar [note: '메인 카테고리 이름 (ex. 든든한 한 끼, 건강식 등)']
created_at datetime
updated_at datetime
note: '레시피의 상위 카테고리 테이블'
}
Table sub_category {
id int [pk, increment, note: '서브 카테고리 고유 ID']
main_category_id int [ref: > main_category.id, note: '메인 카테고리 참조']
name varchar [note: '서브 카테고리 이름 (ex. 밥, 국/탕 등)']
created_at datetime
updated_at datetime
note: '레시피의 서브 카테고리 테이블'
}
Table recipe_reservation {
id int [pk, increment, note: '레시피 예약 고유 ID']
user_id int [ref: > user.id, note: '예약한 유저 참조']
recipe_id int [ref: > recipe.id, note: '예약된 레시피 참조']
reservation_time datetime [note: '알림 예약 시간']
status boolean [note: '알림 전송 여부 (true = 전송됨)']
created_at datetime
updated_at datetime
note: '레시피 해먹기 예약 테이블'
}
Table search_list {
id int [pk, increment, note: '검색 기록 고유 ID']
user_id int [ref: > user.id, note: '검색한 유저 참조']
keyword varchar [note: '검색어']
created_at datetime
updated_at datetime
note: '유저의 최근 검색어 테이블'
}
Table total_search_list {
id int [pk, increment, note: '인기 검색어 고유 ID']
rank int [note: '해당 날짜 기준 순위']
keyword varchar [note: '검색어']
search_count int [note: '해당 날짜 기준 검색 횟수']
date date [note: '기준 날짜']
created_at datetime
updated_at datetime
note: '전체 인기 검색어 테이블(우선 Redis에서 갖고 있다가 배치 업데이트)'
}
Table simple_content {
id int [pk, increment, note: '간단 레시피 콘텐츠 고유 ID']
text text [note: '단순 텍스트 형태의 요리 설명']
recipe_id int [ref: > recipe.id, note: '레시피 참조']
created_at datetime
updated_at datetime
note: '레시피 타입이 simple일 경우, 내용을 저장하는 테이블'
}
Table step_by_step_content {
id int [pk, increment, note: '단계별 콘텐츠 고유 ID']
order int [note: '단계 순서']
text text [note: '해당 단계 설명']
recipe_id int [ref: > recipe.id, note: '레시피 참조']
created_at datetime
updated_at datetime
note: '레시피 타입이 step-by-step일 경우 단계별 내용 저장'
}
Table step_image {
id int [pk, increment, note: '단계 이미지 고유 ID']
step_id int [ref: > step_by_step_content.id, note: '단계 콘텐츠 참조']
image_url varchar [note: '단계별 이미지 URL (여러 장 가능)']
created_at datetime
updated_at datetime
note: 'step-by-step 레시피 단계에서 사용된 사용된 이미지들 저장 테이블'
}
## 북마크 테이블 추가
## 리뷰 테이블 추가: 댓글, 별점 준다고 생각했고 (레시피에도 별도로 저장)
## 커먼 코드 추가:
Table common_code_group {
group_code varchar(3) [pk, note: '코드 그룹 (예: C01, H01, J01)']
group_name varchar(30) [note: '그룹 이름 (예: COOKING_LEVEL, JOB)']
remark varchar(100) [note: '설명 또는 비고']
use_yn char(1) [note: '사용 여부(Y/N)']
created_at datetime [note: '생성일시']
updated_at datetime [note: '수정일시']
created_by varchar(20) [note: '생성자']
updated_by varchar(20) [note: '수정자']
note: '공통 코드 그룹 테이블'
}
Table common_code {
code varchar(6) [pk, note: '전역 유일 6자리 코드값 (예: C01001, H01002)']
group_code varchar(3) [ref: > code_group.group_code, note: '코드 그룹 참조']
name varchar(20) [note: '표시 이름 (예: 초보자, 1인 가구, 학생 등)']
remark varchar(100) [note: '설명 또는 비고']
sort_order int [note: '정렬 순서']
use_yn char(1) [note: '사용 여부(Y/N)']
depth int [note: '계층 깊이 (기본값 1)']
parent_code varchar(6) [note: '상위 코드값 (nullable)']
created_at datetime [note: '생성일시']
updated_at datetime [note: '수정일시']
created_by varchar(20) [note: '생성자']
updated_by varchar(20) [note: '수정자']
note: '공통 코드 상세 테이블'
}
-- 요리 실력 (COOKING_LEVEL)
INSERT INTO common_code (
code, group_code, name, remark, sort_order, use_yn, depth, created_at, created_by
) VALUES
('C01001', 'C01', '초보자', '요리 실력', 1, 'Y', 1, NOW(), 'SYSTEM'),
('C01002', 'C01', '숙련자', '요리 실력', 2, 'Y', 1, NOW(), 'SYSTEM'),
('C01003', 'C01', '전문가', '요리 실력', 3, 'Y', 1, NOW(), 'SYSTEM');
-- 가구 형태 (HOUSEHOLD_TYPE)
INSERT INTO common_code (
code, group_code, name, remark, sort_order, use_yn, depth, created_at, created_by
) VALUES
('H01001', 'H01', '1인 가구', '가구 형태', 1, 'Y', 1, NOW(), 'SYSTEM'),
('H01002', 'H01', '2인 가구', '가구 형태', 2, 'Y', 1, NOW(), 'SYSTEM'),
('H01003', 'H01', '3인 이상', '가구 형태', 3, 'Y', 1, NOW(), 'SYSTEM'),
('H01004', 'H01', '기타', '가구 형태', 4, 'Y', 1, NOW(), 'SYSTEM');
-- 직업 (JOB)
INSERT INTO common_code (
code, group_code, name, remark, sort_order, use_yn, depth, created_at, created_by
) VALUES
('J01001', 'J01', '학생', '직업', 1, 'Y', 1, NOW(), 'SYSTEM'),
('J01002', 'J01', '주부', '직업', 2, 'Y', 1, NOW(), 'SYSTEM'),
('J01003', 'J01', '직장인', '직업', 3, 'Y', 1, NOW(), 'SYSTEM'),
('J01004', 'J01', '무직', '직업', 4, 'Y', 1, NOW(), 'SYSTEM'),
('J01005', 'J01', '자영업자', '직업', 5, 'Y', 1, NOW(), 'SYSTEM'),
('J01006', 'J01', '기타', '직업', 6, 'Y', 1, NOW(), 'SYSTEM');
<aside> 💡
궁금한거(진태)
결과물 공유하는 자리는 전체적으로
유저테이블: deletedAt, fcm_token,
admin_user를 위한 테이블 하나 id, passid, password
리프레시토큰 (회원 탈퇴에 쓰는 컬럼 추가)