Entity 설계

ddoachi·2025년 4월 19일

TekaPicker

목록 보기
6/30

TekaPicker 프로젝트의 주요 기능 요구사항을 기반으로 한 DB Entity 설계 정리.


User

  • 사용자 정보 저장용 테이블임
  • 회원가입 및 인증 목적
  • 이미 존재하는 테이블 기준으로 작성
id: string (PK)  -- UUID
email: string
password: string
nickname: string
createdAt: datetime

  • 회사에서 제공하는 메뉴 정보 저장용 테이블임
  • 코인 단위 비용, 카테고리, 유통기한 등을 포함함
  • 사용자 피드백을 위해 별도로 연결 테이블 존재함
id: string (PK)
name: string
coin: number        -- 1, 2, 4 중 하나 or 음료면 1
category: string    -- 김밥, 샐러드 등
calories: number | null
expirationDate: date
isBeverage: boolean
createdAt: datetime
updatedAt: datetime

PickedMenu

  • 사용자가 메뉴를 선택했을 때 기록되는 테이블임
  • 끼니 유형 및 상태도 함께 저장함
  • 상태는 '회사', '집', '먹었음' 중 하나임
id: string (PK)
userId: string (FK → User)
menuId: string (FK → Menu)
mealType: 'breakfast' | 'lunch' | 'dinner'
status: '회사' | '집' | '먹었음'
pickedAt: datetime
eatenAt: datetime | null

UserTagging

  • 사용자가 사원증으로 태깅한 기록을 저장함
  • 태깅 1회당 5코인 선택 가능
  • 첫 태깅은 근무시간 차감, 이후 태깅은 급여 공제됨
id: string (PK)
userId: string (FK → User)
mealType: 'breakfast' | 'lunch' | 'dinner'
taggedAt: datetime
isPaid: boolean     -- false면 근무시간 차감, true면 급여 공제

  • 사용자가 메뉴에 대해 평가한 내용을 저장함
  • 별점 및 메모 형태로 입력 가능
  • 유저와 메뉴 1:1 관계
id: string (PK)
userId: string (FK → User)
menuId: string (FK → Menu)
rating: number | null  -- 1~5점
memo: string | null
createdAt: datetime
updatedAt: datetime

ERD Diagram


설계 요약

  • 태깅 횟수는 user_tagging 행 개수로 계산함
  • 메뉴 유통기한은 expirationDate 그대로 사용함
  • 피드백은 유저-메뉴 1:1 관계로 관리함
  • menu와 picked_menu는 분리해서 정규화 구조 유지함# TekaPicker Entity 설계
profile
내일도 풀스택

0개의 댓글