users
)사용자 계정을 저장하는 테이블.
이메일, 비밀번호, OAuth 정보(네이버, 카카오, 구글 로그인)를 저장함.
CREATE TABLE users (
user_id VARCHAR2(50) PRIMARY KEY, -- 사용자 ID (UUID 또는 일반 계정 ID)
email VARCHAR2(100) UNIQUE NOT NULL, -- 이메일 (로그인용)
password VARCHAR2(255), -- 비밀번호 (OAuth 로그인 사용자는 NULL 가능)
name VARCHAR2(50) NOT NULL, -- 사용자 이름
oauth_provider VARCHAR2(20), -- OAuth 제공자 (naver, kakao, google)
created_at TIMESTAMP DEFAULT SYSTIMESTAMP, -- 가입일
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP -- 업데이트 날짜
);
oauth_accounts
)OAuth(소셜 로그인) 계정을 관리하는 테이블
사용자가 네이버, 카카오, 구글과 같은 소셜 로그인 방식을 사용할 경우, 해당 서비스에서 제공하는 사용자 ID를 저장하여 연동을 관리함.
CREATE TABLE oauth_accounts (
oauth_id VARCHAR2(100) PRIMARY KEY, -- OAuth 제공자의 사용자 ID
user_id VARCHAR2(50) NOT NULL, -- users 테이블의 user_id와 연결
provider VARCHAR2(20) NOT NULL CHECK (provider IN ('naver', 'kakao', 'google')), -- OAuth 제공자
created_at TIMESTAMP DEFAULT SYSTIMESTAMP, -- 연동 시간
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
diary
)사용자가 작성한 일기의 원본 데이터를 저장하는 테이블.
일기 제목, 내용, 날짜, 책갈피 여부, 요약 등을 포함함.
CREATE TABLE diary (
diary_id NUMBER PRIMARY KEY, -- 일기 ID
user_id VARCHAR2(50) NOT NULL, -- 사용자 ID
title VARCHAR2(255) NOT NULL, -- 일기 제목
content CLOB NOT NULL, -- 일기 본문 (원본)
diary_date DATE NOT NULL, -- 일기 작성 날짜
is_bookmarked NUMBER(1) DEFAULT 0 CHECK (is_bookmarked IN (0, 1)),
-- 책갈피 여부 (0: 일반, 1: 책갈피)
summary CLOB, -- 요약 (추후 AI 요약 기능 가능)
created_at TIMESTAMP DEFAULT SYSTIMESTAMP, -- 생성일
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP, -- 수정일
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
diary_sentence_analysis
)일기 내용을 문장 단위로 나눠 감정과 활동을 JSON 형태로 저장.
sentence_data
컬럼에 JSON을 저장하여 유연하게 관리 가능.
CREATE TABLE diary_sentence_analysis (
sentence_id NUMBER PRIMARY KEY, -- 문장 ID
diary_id NUMBER NOT NULL, -- 관련된 일기 ID
sentence_order NUMBER NOT NULL, -- 일기 내 문장 순서
sentence_data CLOB NOT NULL, -- JSON 형태로 감정, 활동 저장
analyzed_at TIMESTAMP DEFAULT SYSTIMESTAMP, -- 분석된 시간
FOREIGN KEY (diary_id) REFERENCES diary(diary_id) ON DELETE CASCADE
)
📌 활동 카테고리 예시
카테고리 | 예시 활동 |
---|---|
야외 활동 | 산책, 조깅, 등산, 공원 가기 |
운동 | 헬스, 요가, 스트레칭, 춤 |
창작 활동 | 그림 그리기, 글쓰기, 음악 연주, 요리 |
여가 | 영화 감상, 책 읽기, 게임, 카페 방문 |
소셜 활동 | 친구 만나기, 가족과 시간 보내기, 전화 통화 |
학습 | 공부, 강의 듣기, 문제 풀기 |
감성 활동 | 명상, 일기 쓰기, 감상적인 노래 듣기 |
📌 sentence_data
JSON 예시
{
"sentence": "산책을 나왔더니 기분이 좋았다!",
"emotion": "행복",
"activity": "야외 활동" //산책
}
{
"sentence": "음료수 사먹어야지",
"emotion": "평온",
"activity": "여가" //음료 구매
}