feat: 初始提交
This commit is contained in:
179
backend/db/schema.sql
Normal file
179
backend/db/schema.sql
Normal file
@@ -0,0 +1,179 @@
|
||||
-- 全量数据库建表脚本,适用于 MySQL 8.x
|
||||
-- 如需重建,请先根据需要执行 DROP TABLE,再运行本脚本
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL UNIQUE,
|
||||
email VARCHAR(128) UNIQUE,
|
||||
hashed_password VARCHAR(255) NOT NULL,
|
||||
external_id VARCHAR(255) UNIQUE,
|
||||
is_admin TINYINT(1) DEFAULT 0,
|
||||
is_active TINYINT(1) DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS novel_projects (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
initial_prompt TEXT,
|
||||
status VARCHAR(32) DEFAULT 'draft',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_novel_projects_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS novel_conversations (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
project_id CHAR(36) NOT NULL,
|
||||
seq INT NOT NULL,
|
||||
role VARCHAR(32) NOT NULL,
|
||||
content LONGTEXT NOT NULL,
|
||||
metadata JSON NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_conversations_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uq_conversations_project_seq (project_id, seq)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS novel_blueprints (
|
||||
project_id CHAR(36) PRIMARY KEY,
|
||||
title VARCHAR(255) NULL,
|
||||
target_audience VARCHAR(255) NULL,
|
||||
genre VARCHAR(128) NULL,
|
||||
style VARCHAR(128) NULL,
|
||||
tone VARCHAR(128) NULL,
|
||||
one_sentence_summary TEXT NULL,
|
||||
full_synopsis LONGTEXT NULL,
|
||||
world_setting JSON NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_blueprints_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS blueprint_characters (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
project_id CHAR(36) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
identity VARCHAR(255) NULL,
|
||||
personality TEXT NULL,
|
||||
goals TEXT NULL,
|
||||
abilities TEXT NULL,
|
||||
relationship_to_protagonist TEXT NULL,
|
||||
extra JSON NULL,
|
||||
position INT DEFAULT 0,
|
||||
CONSTRAINT fk_characters_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS blueprint_relationships (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
project_id CHAR(36) NOT NULL,
|
||||
character_from VARCHAR(255) NOT NULL,
|
||||
character_to VARCHAR(255) NOT NULL,
|
||||
description TEXT NULL,
|
||||
position INT DEFAULT 0,
|
||||
CONSTRAINT fk_relationships_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chapter_outlines (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
project_id CHAR(36) NOT NULL,
|
||||
chapter_number INT NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
summary TEXT NULL,
|
||||
CONSTRAINT fk_outlines_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uq_outline_project_chapter (project_id, chapter_number)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chapters (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
project_id CHAR(36) NOT NULL,
|
||||
chapter_number INT NOT NULL,
|
||||
real_summary TEXT NULL,
|
||||
status VARCHAR(32) DEFAULT 'not_generated',
|
||||
word_count INT DEFAULT 0,
|
||||
selected_version_id BIGINT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_chapters_project FOREIGN KEY (project_id) REFERENCES novel_projects(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uq_chapter_project_number (project_id, chapter_number)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chapter_versions (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
chapter_id BIGINT NOT NULL,
|
||||
version_label VARCHAR(64) NULL,
|
||||
provider VARCHAR(64) NULL,
|
||||
content LONGTEXT NOT NULL,
|
||||
metadata JSON NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_versions_chapter FOREIGN KEY (chapter_id) REFERENCES chapters(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
ALTER TABLE chapters
|
||||
ADD CONSTRAINT fk_chapter_selected_version
|
||||
FOREIGN KEY (selected_version_id) REFERENCES chapter_versions(id)
|
||||
ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chapter_evaluations (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
chapter_id BIGINT NOT NULL,
|
||||
version_id BIGINT NULL,
|
||||
decision VARCHAR(32) NULL,
|
||||
feedback TEXT NULL,
|
||||
score DECIMAL(5,2) NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_evaluations_chapter FOREIGN KEY (chapter_id) REFERENCES chapters(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_evaluations_version FOREIGN KEY (version_id) REFERENCES chapter_versions(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS llm_configs (
|
||||
user_id INT PRIMARY KEY,
|
||||
llm_provider_url TEXT NULL,
|
||||
llm_provider_api_key TEXT NULL,
|
||||
llm_provider_model TEXT NULL,
|
||||
CONSTRAINT fk_llm_configs_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS prompts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) UNIQUE NOT NULL,
|
||||
title VARCHAR(255) NULL,
|
||||
content LONGTEXT NOT NULL,
|
||||
tags VARCHAR(255) NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_configs (
|
||||
`key` VARCHAR(100) PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
description VARCHAR(255) NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS admin_settings (
|
||||
`key` VARCHAR(64) PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_daily_requests (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
request_date DATE NOT NULL,
|
||||
request_count INT DEFAULT 0,
|
||||
UNIQUE KEY uq_user_request_date (user_id, request_date),
|
||||
CONSTRAINT fk_daily_requests_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS usage_metrics (
|
||||
`key` VARCHAR(64) PRIMARY KEY,
|
||||
value INT NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS update_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
content TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
created_by VARCHAR(64) NULL,
|
||||
is_pinned TINYINT(1) DEFAULT 0
|
||||
);
|
||||
Reference in New Issue
Block a user