1. 사용자 테이블 (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  -- 업데이트 날짜
);

2. OAuth 계정 연동 테이블 (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
);

3. 일기 테이블 (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
);

4. 문장별 감정 분석 테이블 (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": "여가" //음료 구매
}