1. 데이터베이스 구성

항목 내용
RDBMS MariaDB
Vector DB FAISS, ChromaDB

2. 데이터베이스 URL

🔗 DB Diagram 보기

3. 데이터베이스 이미지

스크린샷 2025-11-02 오후 1.06.36.png

4. DB SQL 구문

CREATE TABLE users (
    id CHAR(36) PRIMARY KEY NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    nickname VARCHAR(12) NOT NULL,
    is_privacy_agree BOOLEAN NOT NULL,
    created_at DATETIME(6) NOT NULL,
    updated_at DATETIME(6) NOT NULL,
    deleted_at DATETIME(6)
);

CREATE TABLE user_profiles (
    user_id CHAR(36) PRIMARY KEY NOT NULL,
    age_group VARCHAR(20) NOT NULL,
    gender VARCHAR(20) NOT NULL,
    height DECIMAL(5,2) NOT NULL,
    weight DECIMAL(5,2) NOT NULL,
    sleep_minutes INT,
    exercise_minutes INT,
    CONSTRAINT fk_user_profile_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE user_profile_forbidden_food (
    user_id CHAR(36) NOT NULL,
    food VARCHAR(100) NOT NULL,
    FOREIGN KEY (user_id)
        REFERENCES user_profiles(user_id)
        ON DELETE CASCADE
);

CREATE TABLE refresh_tokens (
    user_id CHAR(36) PRIMARY KEY NOT NULL,
    token VARCHAR(255) NOT NULL,
    CONSTRAINT fk_refresh_token_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE posts (
    id CHAR(36) PRIMARY KEY NOT NULL,
    title VARCHAR(80) NOT NULL,
    content TEXT NOT NULL,
    view_count INT NOT NULL DEFAULT 0,
    user_id CHAR(36) NOT NULL,
    created_at DATETIME(6) NOT NULL,
    updated_at DATETIME(6) NOT NULL,
    deleted_at DATETIME(6),
    CONSTRAINT fk_post_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE comments (
    id CHAR(36) PRIMARY KEY NOT NULL,
    post_id CHAR(36) NOT NULL,
    user_id CHAR(36) NOT NULL,
    parent_id CHAR(36),
    target_id CHAR(36),
    content TEXT NOT NULL,
    created_at DATETIME(6) NOT NULL,
    updated_at DATETIME(6) NOT NULL,
    deleted_at DATETIME(6),
    CONSTRAINT fk_comment_post FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
    CONSTRAINT fk_comment_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_comment_parent FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE,
    CONSTRAINT fk_comment_target FOREIGN KEY (target_id) REFERENCES comments(id) ON DELETE CASCADE
);

CREATE TABLE likes (
    id CHAR(36) PRIMARY KEY NOT NULL,
    user_id CHAR(36) NOT NULL,
    target_type VARCHAR(20) NOT NULL,
    target_id CHAR(36) NOT NULL,
    created_at DATETIME(6) NOT NULL,
    updated_at DATETIME(6) NOT NULL,
    UNIQUE KEY uq_likes_user_target (user_id, target_type, target_id),
    CONSTRAINT fk_like_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE images (
    id CHAR(36) PRIMARY KEY NOT NULL,
    object_key VARCHAR(255) NOT NULL,
    target_type VARCHAR(20) NOT NULL,
    target_id CHAR(36) NOT NULL,
    sort_order INT,
    created_at DATETIME(6) NOT NULL,
    updated_at DATETIME(6) NOT NULL,
    deleted_at DATETIME(6)
);

CREATE TABLE diet_recommendations (
    id CHAR(36) PRIMARY KEY NOT NULL,
    user_id CHAR(36) NOT NULL,
    meal_type VARCHAR(20) NOT NULL,
    recommended_date DATE NOT NULL,
    source VARCHAR(20) NOT NULL,
    created_at DATETIME(6) NOT NULL,
    CONSTRAINT fk_diet_recommend_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE diet_recommendation_items (
    id CHAR(36) PRIMARY KEY NOT NULL,
    recommendation_id CHAR(36) NOT NULL,
    food_name VARCHAR(100) NOT NULL,
    calories INT,
    protein DECIMAL(5,2),
    fat DECIMAL(5,2),
    carbs DECIMAL(5,2),
    CONSTRAINT fk_diet_recommend_item
        FOREIGN KEY (recommendation_id)
        REFERENCES diet_recommendations(id)
        ON DELETE CASCADE
);

CREATE TABLE diet_logs (
    id CHAR(36) PRIMARY KEY NOT NULL,
    user_id CHAR(36) NOT NULL,
    meal_type VARCHAR(20) NOT NULL,
    log_date DATE NOT NULL,
    source VARCHAR(20) NOT NULL,
    recommendation_id CHAR(36),
    created_at DATETIME(6) NOT NULL,
    UNIQUE KEY uq_diet_log_user_date_meal (user_id, log_date, meal_type),
    CONSTRAINT fk_diet_log_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_diet_log_recommend FOREIGN KEY (recommendation_id) REFERENCES diet_recommendations(id) ON DELETE SET NULL
);

CREATE TABLE diet_log_items (
    id CHAR(36) PRIMARY KEY NOT NULL,
    diet_log_id CHAR(36) NOT NULL,
    food_name VARCHAR(100) NOT NULL,
    calories INT,
    protein DECIMAL(5,2),
    fat DECIMAL(5,2),
    carbs DECIMAL(5,2),
    CONSTRAINT fk_diet_log_item
        FOREIGN KEY (diet_log_id)
        REFERENCES diet_logs(id)
        ON DELETE CASCADE
);

CREATE TABLE workout_recommendations (
    id CHAR(36) PRIMARY KEY NOT NULL,
    user_id CHAR(36) NOT NULL,
    recommended_date DATE NOT NULL,
    source VARCHAR(20) NOT NULL,
    created_at DATETIME(6) NOT NULL,
    CONSTRAINT fk_workout_recommend_user
        FOREIGN KEY (user_id)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE TABLE workout_recommendation_exercises (
    id CHAR(36) PRIMARY KEY NOT NULL,
    recommendation_id CHAR(36) NOT NULL,
    exercise_name VARCHAR(100) NOT NULL,
    sets INT,
    repetitions INT,
    duration_minutes INT,
    calories_burned INT,
    CONSTRAINT fk_workout_recommend_ex
        FOREIGN KEY (recommendation_id)
        REFERENCES workout_recommendations(id)
        ON DELETE CASCADE
);

CREATE TABLE workout_logs (
    id CHAR(36) PRIMARY KEY NOT NULL,
    user_id CHAR(36) NOT NULL,
    log_date DATE NOT NULL,
    source VARCHAR(20) NOT NULL,
    recommendation_id CHAR(36),
    total_minutes INT,
    total_calories_burned INT,
    created_at DATETIME(6) NOT NULL,
    UNIQUE KEY uq_workout_log_user_date (user_id, log_date),
    CONSTRAINT fk_workout_log_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_workout_log_recommend FOREIGN KEY (recommendation_id) REFERENCES workout_recommendations(id) ON DELETE SET NULL
);

CREATE TABLE workout_log_exercises (
    id CHAR(36) PRIMARY KEY NOT NULL,
    workout_log_id CHAR(36) NOT NULL,
    exercise_name VARCHAR(100) NOT NULL,
    sets INT,
    repetitions INT,
    duration_minutes INT,
    calories_burned INT,
    CONSTRAINT fk_workout_log_ex
        FOREIGN KEY (workout_log_id)
        REFERENCES workout_logs(id)
        ON DELETE CASCADE
);