1) users (사용자)

필드명 타입 설명
id BIGINT 사용자 PK
email VARCHAR(255) 로그인 이메일(유니크)
nickname VARCHAR(50) 닉네임
profile_image_url VARCHAR(500) 프로필 이미지 URL
github_username VARCHAR(100) GitHub 연동용 계정명(옵션)
status ENUM ACTIVE / SUSPENDED / DELETED

2) study_groups (스터디 그룹)

검색 카드/필터에 필요한 “핵심 표시 정보” 중심

필드명 타입 설명
id BIGINT 그룹 PK
owner_user_id BIGINT FK(users.id) 그룹장
name VARCHAR(60) 그룹명(필수, 글자수 제한 대상)
description TEXT 소개(정책상 필수/선택)
thumbnail_type ENUM UPLOAD / DEFAULT
thumbnail_url VARCHAR(500) 업로드 썸네일 URL(옵션)
default_thumbnail_key VARCHAR(50) 기본 이미지 키(옵션)
category ENUM WAKE / SEATED / COTE / LANGUAGE / CERT / ETC
join_type ENUM PUBLIC / APPROVAL / INVITE_ONLY
min_members INT 최소 인원
max_members INT 최대 인원(필수 권장)
current_member_count INT 현재 인원(집계 캐시)
waitlist_enabled BOOLEAN 대기열 사용 여부
waitlist_policy ENUM AUTO / MANUAL (대기자 승인 정책)
status ENUM RECRUITING / CLOSED
start_date DATE 시작일(옵션)
end_date DATE 종료일(옵션)
duration_weeks INT n주 기간(옵션)
is_indefinite BOOLEAN 무기한 여부(종료일 미사용)
closed_at DATETIME 모집 마감 시각

3) tags (해시태그 사전)

필드명 타입 설명
id BIGINT 태그 PK
name VARCHAR(30) 태그 원문(유니크 권장)
normalized_name VARCHAR(30) 검색용 정규화(소문자/공백제거 등)
use_count INT 사용 횟수(자동완성 정렬용 캐시)

4) study_group_tags (그룹-태그 매핑 N:M)

필드명 타입 설명
id BIGINT PK
group_id BIGINT FK(study_groups.id) 그룹
tag_id BIGINT FK(tags.id) 태그

5) group_memberships (그룹 멤버십)

필드명 타입 설명
id BIGINT PK
group_id BIGINT FK 그룹
user_id BIGINT FK 사용자
role ENUM OWNER / ADMIN / MEMBER
status ENUM ACTIVE / LEFT / BANNED
joined_at DATETIME 가입 시각
left_at DATETIME 탈퇴 시각

6) group_join_requests (승인제 참여 신청)

join_type=APPROVAL일 때 사용

필드명 타입 설명
id BIGINT PK
group_id BIGINT FK 그룹
user_id BIGINT FK 신청자
message VARCHAR(300) 신청 메시지
status ENUM PENDING / APPROVED / REJECTED / CANCELED
processed_by BIGINT FK(users.id) 처리자(운영자/그룹장)
processed_at DATETIME 처리 시각

7) group_invitations (초대전용 링크/코드)