567 lines
19 KiB
SQL
567 lines
19 KiB
SQL
-- ============================================
|
||
-- 星域故事汇 完整数据库结构 V2.0
|
||
-- 支持:AI改写/续写/创作、UGC、社交、计费
|
||
-- ============================================
|
||
|
||
CREATE DATABASE IF NOT EXISTS stardom_story DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
USE stardom_story;
|
||
|
||
-- ============================================
|
||
-- 一、用户体系
|
||
-- ============================================
|
||
|
||
-- 用户主表
|
||
CREATE TABLE users (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
openid VARCHAR(100) UNIQUE NOT NULL COMMENT '微信openid',
|
||
unionid VARCHAR(100) DEFAULT '' COMMENT '微信unionid',
|
||
nickname VARCHAR(100) DEFAULT '' COMMENT '昵称',
|
||
avatar_url VARCHAR(500) DEFAULT '' COMMENT '头像',
|
||
gender TINYINT DEFAULT 0 COMMENT '0未知 1男 2女',
|
||
phone VARCHAR(20) DEFAULT '' COMMENT '手机号',
|
||
level INT DEFAULT 1 COMMENT '用户等级',
|
||
exp INT DEFAULT 0 COMMENT '经验值',
|
||
vip_type TINYINT DEFAULT 0 COMMENT '0普通 1月卡 2年卡 3永久',
|
||
vip_expire_at DATETIME DEFAULT NULL COMMENT 'VIP过期时间',
|
||
coin_balance INT DEFAULT 0 COMMENT '金币余额',
|
||
is_creator BOOLEAN DEFAULT FALSE COMMENT '是否认证创作者',
|
||
is_banned BOOLEAN DEFAULT FALSE COMMENT '是否封禁',
|
||
ban_reason VARCHAR(255) DEFAULT '',
|
||
last_login_at DATETIME DEFAULT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_openid (openid),
|
||
INDEX idx_unionid (unionid),
|
||
INDEX idx_creator (is_creator)
|
||
) ENGINE=InnoDB COMMENT='用户主表';
|
||
|
||
-- 用户统计表(高频更新分离)
|
||
CREATE TABLE user_stats (
|
||
user_id BIGINT PRIMARY KEY,
|
||
total_play_count INT DEFAULT 0 COMMENT '总游玩次数',
|
||
total_endings INT DEFAULT 0 COMMENT '解锁结局数',
|
||
total_creations INT DEFAULT 0 COMMENT '创作数',
|
||
total_ai_uses INT DEFAULT 0 COMMENT 'AI使用次数',
|
||
followers_count INT DEFAULT 0 COMMENT '粉丝数',
|
||
following_count INT DEFAULT 0 COMMENT '关注数',
|
||
likes_received INT DEFAULT 0 COMMENT '获赞数',
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB COMMENT='用户统计表';
|
||
|
||
-- 用户关注关系表
|
||
CREATE TABLE user_follows (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
follower_id BIGINT NOT NULL COMMENT '关注者',
|
||
following_id BIGINT NOT NULL COMMENT '被关注者',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_follow (follower_id, following_id),
|
||
INDEX idx_follower (follower_id),
|
||
INDEX idx_following (following_id)
|
||
) ENGINE=InnoDB COMMENT='用户关注关系';
|
||
|
||
-- ============================================
|
||
-- 二、故事内容体系
|
||
-- ============================================
|
||
|
||
-- 故事主表(官方+UGC统一)
|
||
CREATE TABLE stories (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
author_id BIGINT DEFAULT 0 COMMENT '作者ID,0为官方',
|
||
title VARCHAR(100) NOT NULL COMMENT '标题',
|
||
cover_url VARCHAR(500) DEFAULT '' COMMENT '封面',
|
||
description TEXT COMMENT '简介',
|
||
category VARCHAR(50) NOT NULL COMMENT '分类',
|
||
tags VARCHAR(255) DEFAULT '' COMMENT '标签,逗号分隔',
|
||
word_count INT DEFAULT 0 COMMENT '字数',
|
||
node_count INT DEFAULT 0 COMMENT '节点数',
|
||
ending_count INT DEFAULT 0 COMMENT '结局数',
|
||
difficulty TINYINT DEFAULT 2 COMMENT '难度 1简单 2普通 3困难',
|
||
|
||
-- 来源标记
|
||
source_type ENUM('official','ugc','ai_generated','ai_assisted') DEFAULT 'official' COMMENT '来源类型',
|
||
base_story_id BIGINT DEFAULT NULL COMMENT '基于哪个故事改编',
|
||
ai_generation_id BIGINT DEFAULT NULL COMMENT '关联的AI生成记录',
|
||
|
||
-- 状态控制
|
||
status TINYINT DEFAULT 0 COMMENT '0草稿 1审核中 2已发布 3已下架 4已拒绝',
|
||
review_note VARCHAR(500) DEFAULT '' COMMENT '审核备注',
|
||
is_featured BOOLEAN DEFAULT FALSE COMMENT '是否精选',
|
||
is_hot BOOLEAN DEFAULT FALSE COMMENT '是否热门',
|
||
is_new BOOLEAN DEFAULT TRUE COMMENT '是否新作',
|
||
|
||
-- 付费设置
|
||
price_type TINYINT DEFAULT 0 COMMENT '0免费 1付费 2广告解锁',
|
||
price_coin INT DEFAULT 0 COMMENT '价格(金币)',
|
||
free_chapters INT DEFAULT 0 COMMENT '免费章节数',
|
||
|
||
-- 统计(读多写少可放主表)
|
||
play_count INT DEFAULT 0,
|
||
like_count INT DEFAULT 0,
|
||
collect_count INT DEFAULT 0,
|
||
comment_count INT DEFAULT 0,
|
||
share_count INT DEFAULT 0,
|
||
|
||
published_at DATETIME DEFAULT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
||
INDEX idx_author (author_id),
|
||
INDEX idx_category (category),
|
||
INDEX idx_status (status),
|
||
INDEX idx_source (source_type),
|
||
INDEX idx_featured (is_featured),
|
||
INDEX idx_play (play_count),
|
||
INDEX idx_created (created_at)
|
||
) ENGINE=InnoDB COMMENT='故事主表';
|
||
|
||
-- 故事节点表
|
||
CREATE TABLE story_nodes (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
story_id BIGINT NOT NULL,
|
||
node_key VARCHAR(50) NOT NULL COMMENT '节点标识',
|
||
parent_node_key VARCHAR(50) DEFAULT '' COMMENT '父节点(用于树形结构)',
|
||
chapter_num INT DEFAULT 1 COMMENT '章节号',
|
||
|
||
-- 内容
|
||
content TEXT NOT NULL COMMENT '文本内容',
|
||
speaker VARCHAR(50) DEFAULT '' COMMENT '说话角色',
|
||
emotion VARCHAR(30) DEFAULT '' COMMENT '情绪标签',
|
||
|
||
-- 媒体资源
|
||
background_image VARCHAR(500) DEFAULT '',
|
||
character_images JSON DEFAULT NULL COMMENT '角色立绘数组',
|
||
bgm VARCHAR(500) DEFAULT '',
|
||
sound_effect VARCHAR(500) DEFAULT '',
|
||
voice_url VARCHAR(500) DEFAULT '' COMMENT '语音URL',
|
||
|
||
-- 结局设置
|
||
is_ending BOOLEAN DEFAULT FALSE,
|
||
ending_name VARCHAR(100) DEFAULT '',
|
||
ending_type ENUM('good','bad','normal','hidden','secret') DEFAULT 'normal',
|
||
ending_score INT DEFAULT 0,
|
||
ending_cg VARCHAR(500) DEFAULT '' COMMENT '结局CG图',
|
||
|
||
-- AI标记
|
||
is_ai_generated BOOLEAN DEFAULT FALSE,
|
||
ai_generation_id BIGINT DEFAULT NULL,
|
||
|
||
sort_order INT DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
||
INDEX idx_story (story_id),
|
||
INDEX idx_node_key (story_id, node_key),
|
||
INDEX idx_chapter (story_id, chapter_num),
|
||
FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB COMMENT='故事节点表';
|
||
|
||
-- 故事选项表
|
||
CREATE TABLE story_choices (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
story_id BIGINT NOT NULL,
|
||
node_id BIGINT NOT NULL,
|
||
text VARCHAR(200) NOT NULL COMMENT '选项文本',
|
||
next_node_key VARCHAR(50) NOT NULL,
|
||
|
||
-- 条件解锁
|
||
condition_type ENUM('none','item','attr','ending','vip','ad') DEFAULT 'none',
|
||
condition_value VARCHAR(100) DEFAULT '' COMMENT '条件值JSON',
|
||
|
||
-- 效果
|
||
effect_type ENUM('none','attr','item','achievement') DEFAULT 'none',
|
||
effect_value VARCHAR(100) DEFAULT '' COMMENT '效果值JSON',
|
||
|
||
-- AI标记
|
||
is_ai_generated BOOLEAN DEFAULT FALSE,
|
||
|
||
sort_order INT DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
||
INDEX idx_story (story_id),
|
||
INDEX idx_node (node_id),
|
||
FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (node_id) REFERENCES story_nodes(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB COMMENT='故事选项表';
|
||
|
||
-- 故事版本表(支持版本回退)
|
||
CREATE TABLE story_versions (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
story_id BIGINT NOT NULL,
|
||
version_num INT NOT NULL COMMENT '版本号',
|
||
nodes_snapshot LONGTEXT NOT NULL COMMENT '节点快照JSON',
|
||
change_log VARCHAR(500) DEFAULT '' COMMENT '变更说明',
|
||
created_by BIGINT NOT NULL,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_version (story_id, version_num),
|
||
INDEX idx_story (story_id)
|
||
) ENGINE=InnoDB COMMENT='故事版本表';
|
||
|
||
-- ============================================
|
||
-- 三、AI生成体系
|
||
-- ============================================
|
||
|
||
-- AI生成记录表
|
||
CREATE TABLE ai_generations (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
story_id BIGINT DEFAULT NULL COMMENT '关联故事',
|
||
|
||
-- 生成类型
|
||
gen_type ENUM('rewrite_ending','rewrite_node','continue','create_outline','create_full','polish','translate') NOT NULL,
|
||
|
||
-- 输入
|
||
source_node_key VARCHAR(50) DEFAULT '',
|
||
source_content TEXT COMMENT '原内容',
|
||
user_prompt TEXT NOT NULL COMMENT '用户指令',
|
||
system_prompt TEXT COMMENT '系统提示词',
|
||
|
||
-- 输出
|
||
generated_content LONGTEXT COMMENT '生成内容',
|
||
generated_nodes JSON COMMENT '生成的节点结构',
|
||
|
||
-- 模型信息
|
||
model_provider VARCHAR(30) DEFAULT '' COMMENT 'openai/anthropic/local',
|
||
model_name VARCHAR(50) DEFAULT '',
|
||
temperature DECIMAL(3,2) DEFAULT 0.70,
|
||
|
||
-- 消耗统计
|
||
input_tokens INT DEFAULT 0,
|
||
output_tokens INT DEFAULT 0,
|
||
total_tokens INT DEFAULT 0,
|
||
latency_ms INT DEFAULT 0 COMMENT '响应耗时',
|
||
cost_cents INT DEFAULT 0 COMMENT '成本(分)',
|
||
|
||
-- 状态
|
||
status TINYINT DEFAULT 1 COMMENT '0失败 1成功 2处理中',
|
||
error_code VARCHAR(50) DEFAULT '',
|
||
error_msg TEXT,
|
||
|
||
-- 用户操作
|
||
is_accepted BOOLEAN DEFAULT NULL COMMENT '用户是否采纳',
|
||
is_edited BOOLEAN DEFAULT FALSE COMMENT '是否编辑后使用',
|
||
is_published BOOLEAN DEFAULT FALSE COMMENT '是否发布',
|
||
|
||
-- 评价
|
||
user_rating TINYINT DEFAULT NULL COMMENT '1-5星评价',
|
||
user_feedback TEXT COMMENT '用户反馈',
|
||
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_story (story_id),
|
||
INDEX idx_type (gen_type),
|
||
INDEX idx_status (status),
|
||
INDEX idx_created (created_at)
|
||
) ENGINE=InnoDB COMMENT='AI生成记录表';
|
||
|
||
-- AI提示词模板表
|
||
CREATE TABLE ai_prompt_templates (
|
||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||
name VARCHAR(100) NOT NULL,
|
||
gen_type VARCHAR(30) NOT NULL,
|
||
category VARCHAR(50) DEFAULT '' COMMENT '适用分类',
|
||
system_prompt TEXT NOT NULL,
|
||
user_prompt_template TEXT NOT NULL COMMENT '用户提示词模板',
|
||
variables JSON COMMENT '可用变量说明',
|
||
model_recommend VARCHAR(50) DEFAULT '',
|
||
temperature_recommend DECIMAL(3,2) DEFAULT 0.70,
|
||
is_active BOOLEAN DEFAULT TRUE,
|
||
sort_order INT DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_type (gen_type),
|
||
INDEX idx_active (is_active)
|
||
) ENGINE=InnoDB COMMENT='AI提示词模板';
|
||
|
||
-- ============================================
|
||
-- 四、用户行为体系
|
||
-- ============================================
|
||
|
||
-- 用户游玩进度表
|
||
CREATE TABLE user_progress (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
story_id BIGINT NOT NULL,
|
||
current_node_key VARCHAR(50) DEFAULT 'start',
|
||
|
||
-- 状态
|
||
status TINYINT DEFAULT 0 COMMENT '0进行中 1已完成',
|
||
play_count INT DEFAULT 1,
|
||
play_duration INT DEFAULT 0 COMMENT '游玩时长(秒)',
|
||
|
||
-- 达成结局
|
||
endings_reached JSON COMMENT '达成的结局列表',
|
||
best_ending_score INT DEFAULT 0,
|
||
|
||
-- 存档数据
|
||
save_data JSON COMMENT '游戏存档(属性/道具等)',
|
||
choices_history JSON COMMENT '选择历史',
|
||
|
||
-- 互动
|
||
is_liked BOOLEAN DEFAULT FALSE,
|
||
is_collected BOOLEAN DEFAULT FALSE,
|
||
|
||
first_play_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
last_play_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
completed_at DATETIME DEFAULT NULL,
|
||
|
||
UNIQUE KEY uk_user_story (user_id, story_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_story (story_id),
|
||
INDEX idx_status (status)
|
||
) ENGINE=InnoDB COMMENT='用户游玩进度';
|
||
|
||
-- 用户结局收集表
|
||
CREATE TABLE user_endings (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
story_id BIGINT NOT NULL,
|
||
node_id BIGINT NOT NULL,
|
||
ending_name VARCHAR(100) NOT NULL,
|
||
ending_type VARCHAR(20) DEFAULT 'normal',
|
||
ending_score INT DEFAULT 0,
|
||
choices_path JSON COMMENT '达成路径',
|
||
play_duration INT DEFAULT 0 COMMENT '本次游玩时长',
|
||
unlocked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_user_ending (user_id, story_id, ending_name),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_story (story_id)
|
||
) ENGINE=InnoDB COMMENT='用户结局收集';
|
||
|
||
-- 用户收藏表
|
||
CREATE TABLE user_collections (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
story_id BIGINT NOT NULL,
|
||
folder_name VARCHAR(50) DEFAULT '默认' COMMENT '收藏夹',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_user_story (user_id, story_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_folder (user_id, folder_name)
|
||
) ENGINE=InnoDB COMMENT='用户收藏';
|
||
|
||
-- 评论表
|
||
CREATE TABLE comments (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
story_id BIGINT NOT NULL,
|
||
parent_id BIGINT DEFAULT NULL COMMENT '父评论ID',
|
||
reply_to_user_id BIGINT DEFAULT NULL COMMENT '回复谁',
|
||
content TEXT NOT NULL,
|
||
like_count INT DEFAULT 0,
|
||
status TINYINT DEFAULT 1 COMMENT '0隐藏 1正常 2置顶',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_story (story_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_parent (parent_id)
|
||
) ENGINE=InnoDB COMMENT='评论表';
|
||
|
||
-- ============================================
|
||
-- 五、经济体系
|
||
-- ============================================
|
||
|
||
-- 用户AI配额表
|
||
CREATE TABLE user_ai_quota (
|
||
user_id BIGINT PRIMARY KEY,
|
||
|
||
-- 每日免费额度
|
||
daily_free_total INT DEFAULT 5 COMMENT '每日免费总次数',
|
||
daily_free_used INT DEFAULT 0 COMMENT '今日已用',
|
||
daily_reset_date DATE COMMENT '重置日期',
|
||
|
||
-- 购买/赠送额度
|
||
purchased_quota INT DEFAULT 0 COMMENT '购买的次数',
|
||
gift_quota INT DEFAULT 0 COMMENT '赠送的次数',
|
||
|
||
-- VIP额度
|
||
vip_daily_bonus INT DEFAULT 0 COMMENT 'VIP每日额外次数',
|
||
|
||
-- 总使用统计
|
||
total_used INT DEFAULT 0,
|
||
total_tokens_used BIGINT DEFAULT 0,
|
||
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB COMMENT='用户AI配额';
|
||
|
||
-- 金币流水表
|
||
CREATE TABLE coin_transactions (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT NOT NULL,
|
||
amount INT NOT NULL COMMENT '正为收入负为支出',
|
||
balance_after INT NOT NULL COMMENT '交易后余额',
|
||
|
||
tx_type ENUM('recharge','purchase','reward','refund','gift','withdraw') NOT NULL,
|
||
ref_type VARCHAR(30) DEFAULT '' COMMENT '关联类型',
|
||
ref_id BIGINT DEFAULT NULL COMMENT '关联ID',
|
||
|
||
description VARCHAR(255) DEFAULT '',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_type (tx_type),
|
||
INDEX idx_created (created_at)
|
||
) ENGINE=InnoDB COMMENT='金币流水';
|
||
|
||
-- 订单表
|
||
CREATE TABLE orders (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
order_no VARCHAR(64) UNIQUE NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
|
||
product_type ENUM('coin','vip','story','ai_quota') NOT NULL,
|
||
product_id VARCHAR(50) DEFAULT '',
|
||
product_name VARCHAR(100) NOT NULL,
|
||
|
||
amount_cents INT NOT NULL COMMENT '金额(分)',
|
||
pay_channel VARCHAR(30) DEFAULT '' COMMENT '支付渠道',
|
||
|
||
status TINYINT DEFAULT 0 COMMENT '0待支付 1已支付 2已取消 3已退款',
|
||
paid_at DATETIME DEFAULT NULL,
|
||
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_order_no (order_no),
|
||
INDEX idx_status (status)
|
||
) ENGINE=InnoDB COMMENT='订单表';
|
||
|
||
-- ============================================
|
||
-- 六、运营与审核
|
||
-- ============================================
|
||
|
||
-- 内容审核表
|
||
CREATE TABLE content_reviews (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
content_type ENUM('story','comment','ai_generation','avatar','nickname') NOT NULL,
|
||
content_id BIGINT NOT NULL,
|
||
user_id BIGINT NOT NULL COMMENT '提交者',
|
||
|
||
content_snapshot TEXT COMMENT '内容快照',
|
||
|
||
-- 机审
|
||
auto_result TINYINT DEFAULT NULL COMMENT '0通过 1疑似 2违规',
|
||
auto_labels JSON COMMENT '机审标签',
|
||
auto_score DECIMAL(5,2) DEFAULT NULL,
|
||
|
||
-- 人审
|
||
review_status TINYINT DEFAULT 0 COMMENT '0待审 1通过 2拒绝',
|
||
reviewer_id BIGINT DEFAULT NULL,
|
||
review_note VARCHAR(500) DEFAULT '',
|
||
reviewed_at DATETIME DEFAULT NULL,
|
||
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_type_status (content_type, review_status),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_created (created_at)
|
||
) ENGINE=InnoDB COMMENT='内容审核表';
|
||
|
||
-- 举报表
|
||
CREATE TABLE reports (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
reporter_id BIGINT NOT NULL,
|
||
target_type ENUM('story','comment','user') NOT NULL,
|
||
target_id BIGINT NOT NULL,
|
||
reason_type VARCHAR(30) NOT NULL COMMENT '举报类型',
|
||
reason_detail TEXT,
|
||
|
||
status TINYINT DEFAULT 0 COMMENT '0待处理 1已处理 2已忽略',
|
||
handler_id BIGINT DEFAULT NULL,
|
||
handle_result VARCHAR(255) DEFAULT '',
|
||
handled_at DATETIME DEFAULT NULL,
|
||
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_target (target_type, target_id),
|
||
INDEX idx_status (status)
|
||
) ENGINE=InnoDB COMMENT='举报表';
|
||
|
||
-- ============================================
|
||
-- 七、数据分析
|
||
-- ============================================
|
||
|
||
-- 行为埋点表(按天分区)
|
||
CREATE TABLE event_logs (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
user_id BIGINT DEFAULT NULL,
|
||
device_id VARCHAR(100) DEFAULT '',
|
||
session_id VARCHAR(64) DEFAULT '',
|
||
|
||
event_name VARCHAR(50) NOT NULL,
|
||
event_params JSON,
|
||
|
||
page_name VARCHAR(50) DEFAULT '',
|
||
ref_page VARCHAR(50) DEFAULT '',
|
||
|
||
platform VARCHAR(20) DEFAULT '' COMMENT 'weapp/h5/app',
|
||
app_version VARCHAR(20) DEFAULT '',
|
||
os VARCHAR(20) DEFAULT '',
|
||
device_model VARCHAR(50) DEFAULT '',
|
||
|
||
ip VARCHAR(50) DEFAULT '',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
event_date DATE AS (DATE(created_at)) STORED,
|
||
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_event (event_name),
|
||
INDEX idx_date (event_date),
|
||
INDEX idx_session (session_id)
|
||
) ENGINE=InnoDB COMMENT='行为埋点表'
|
||
PARTITION BY RANGE (TO_DAYS(event_date)) (
|
||
PARTITION p_default VALUES LESS THAN MAXVALUE
|
||
);
|
||
|
||
-- AI调用统计日表
|
||
CREATE TABLE ai_daily_stats (
|
||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||
stat_date DATE NOT NULL,
|
||
gen_type VARCHAR(30) NOT NULL,
|
||
model_name VARCHAR(50) DEFAULT '',
|
||
|
||
call_count INT DEFAULT 0,
|
||
success_count INT DEFAULT 0,
|
||
fail_count INT DEFAULT 0,
|
||
|
||
total_input_tokens BIGINT DEFAULT 0,
|
||
total_output_tokens BIGINT DEFAULT 0,
|
||
total_cost_cents INT DEFAULT 0,
|
||
|
||
avg_latency_ms INT DEFAULT 0,
|
||
p99_latency_ms INT DEFAULT 0,
|
||
|
||
unique_users INT DEFAULT 0,
|
||
|
||
UNIQUE KEY uk_date_type (stat_date, gen_type, model_name),
|
||
INDEX idx_date (stat_date)
|
||
) ENGINE=InnoDB COMMENT='AI调用日统计';
|
||
|
||
-- ============================================
|
||
-- 八、系统配置
|
||
-- ============================================
|
||
|
||
-- 分类配置表
|
||
CREATE TABLE categories (
|
||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||
name VARCHAR(50) NOT NULL,
|
||
icon VARCHAR(100) DEFAULT '',
|
||
color VARCHAR(20) DEFAULT '',
|
||
sort_order INT DEFAULT 0,
|
||
is_active BOOLEAN DEFAULT TRUE,
|
||
story_count INT DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB COMMENT='分类配置';
|
||
|
||
-- 系统配置表
|
||
CREATE TABLE system_configs (
|
||
config_key VARCHAR(100) PRIMARY KEY,
|
||
config_value TEXT NOT NULL,
|
||
description VARCHAR(255) DEFAULT '',
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB COMMENT='系统配置';
|
||
|
||
-- 敏感词表
|
||
CREATE TABLE sensitive_words (
|
||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||
word VARCHAR(50) NOT NULL,
|
||
category VARCHAR(30) DEFAULT 'general',
|
||
level TINYINT DEFAULT 1 COMMENT '1警告 2禁止',
|
||
is_active BOOLEAN DEFAULT TRUE,
|
||
UNIQUE KEY uk_word (word),
|
||
INDEX idx_category (category)
|
||
) ENGINE=InnoDB COMMENT='敏感词表';
|