Files
WeReadBoard/schema_mysql.sql
T
admin 2a809eb7cc refactor: complete data model v2.0 based on official API docs
数据模型全面重构,基于微信读书官方 8 份 API 文档逐字段比对:

1. 表结构从 18 张扩展到 31 张表:
   新增表:shelf_albums(有声书)、shelf_meta(书架元信息)、prefer_publishers(偏好出版社)、
   prefer_cps(偏好版权方)、prefer_books(偏好书籍卡片)、read_rank(好友排行)、
   medals(勋章)、year_reports(年度报告)、book_best_bookmarks(热门划线)、
   book_underlines(划线热度)、similar_books(相似推荐)、public_reviews(公开点评)、
   search_sessions(搜索会话)

2. 补全所有遗漏字段:
   - reading_stats: +13 个字段 (baseTime, compare, readRate, wrReadTime, wrListenTime 等)
   - book_chapters: +8 个字段 (wordCount, level, price, paid, isMPChapter, anchors 等)
   - book_reviews: +4 个字段 (abstract, range, chapterUid, chapterIdx)
   - recommended_books: +5 个字段 (deepLink, searchIdx, price, payType, type)
   - search_results: +8 个字段 (deepLink, payType, price, soldout, scope 等)
   - book_details: +2 个字段 (deepLink, newRatingDetail)
   - prefer_categories: +2 个字段 (parentCategoryId, categoryType)

3. 时间戳双列设计:
   - 所有整型时间戳字段均伴随 _dt TIMESTAMP 列 (如 read_update_time + read_update_time_dt)
   - 便于直接查询和展示,无需应用层转换

4. 审计字段:
   - 每张表均维护 created_at 和 updated_at
   - MySQL 使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

5. 索引优化:
   - 主键、唯一约束、查询索引根据实际访问模式重新设计
   - 新增复合索引、排序索引、全文检索索引

6. 数据采集脚本更新:
   - 覆盖所有新增表和字段的数据采集
   - skill_version 升级至 1.0.4
   - 有声书/专辑数据采集 (shelf_albums)
   - 偏好出版社/版权方/书籍卡片采集
   - 勋章、年度报告数据采集

7. 后端适配:
   - 移除旧版 ensure_tables 动态建表逻辑
   - 所有按需 API INSERT 语句适配新表结构
   - 搜索结果入库新增 search_sessions 会话表
   - 推荐书籍入库新增 batch_id 批次标识
2026-07-17 10:37:07 +08:00

641 lines
44 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 微信读书数据展示网站 - MySQL 版本建表语句(完整版 v2.0)
-- ============================================================
-- 设计规范:
-- 1. 所有整型时间戳字段均伴随一个 _dt TIMESTAMP 列,便于直接查询和展示
-- 2. 每张表均维护 created_at(创建时间)和 updated_at(更新时间)
-- 3. 主键、唯一约束、查询索引根据实际访问模式设计
-- 4. 字符集 utf8mb4,引擎 InnoDB
-- 5. 每个字段带 COMMENT 中文注释
-- 6. 覆盖微信读书全部 8 份官方 API 文档的所有返回字段
-- ============================================================
CREATE DATABASE IF NOT EXISTS `weread_dashboard`
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
USE `weread_dashboard`;
-- ============================================================
-- ===== 第一组:书架数据 =====
-- ============================================================
-- 1. 书架书籍表(电子书,来自 /shelf/sync 的 books[])
CREATE TABLE IF NOT EXISTS `books` (
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍唯一标识',
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`category` VARCHAR(128) DEFAULT NULL COMMENT '分类(如 "文学-古代诗词")',
`finish_reading` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否读完 (1=读完)',
`read_update_time` INT UNSIGNED DEFAULT NULL COMMENT '最近阅读时间 (Unix 时间戳)',
`read_update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '最近阅读时间 (可读格式)',
`secret` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否私密 (1=私密)',
`is_top` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否置顶 (1=置顶)',
`update_time` INT UNSIGNED DEFAULT NULL COMMENT '书籍更新时间 (Unix 时间戳)',
`update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '书籍更新时间 (可读格式)',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '微信读书 App 深度链接',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`book_id`),
INDEX `idx_books_category` (`category`),
INDEX `idx_books_finish_reading` (`finish_reading`),
INDEX `idx_books_secret` (`secret`),
INDEX `idx_books_is_top` (`is_top`),
INDEX `idx_books_read_update_time` (`read_update_time` DESC),
INDEX `idx_books_title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书架电子书';
-- 2. 书架有声书/专辑表(来自 /shelf/sync 的 albums[])
CREATE TABLE IF NOT EXISTS `shelf_albums` (
`album_id` VARCHAR(64) NOT NULL COMMENT '专辑唯一标识',
`name` VARCHAR(255) DEFAULT NULL COMMENT '专辑名称',
`author_name` VARCHAR(255) DEFAULT NULL COMMENT '演播/作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`track_count` INT UNSIGNED DEFAULT 0 COMMENT '音频集数',
`finish_status` VARCHAR(32) DEFAULT NULL COMMENT '完结状态文案(如 "已完结")',
`finish` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否完结 (1=完结)',
`pay_type` INT UNSIGNED DEFAULT NULL COMMENT '付费类型',
`intro` TEXT DEFAULT NULL COMMENT '专辑简介',
`update_time` INT UNSIGNED DEFAULT NULL COMMENT '更新时间 (Unix 时间戳)',
`update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间 (可读格式)',
`secret` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否私密 (1=私密)',
`lecture_paid` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已购买 (1=已购买)',
`lecture_read_update_time` INT UNSIGNED DEFAULT NULL COMMENT '最近收听时间 (Unix 时间戳)',
`lecture_read_update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '最近收听时间 (可读格式)',
`is_top` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否置顶 (1=置顶)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`album_id`),
INDEX `idx_albums_finish` (`finish`),
INDEX `idx_albums_secret` (`secret`),
INDEX `idx_albums_lecture_read_time` (`lecture_read_update_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书架有声书/专辑';
-- 3. 书架元信息表(来自 /shelf/sync 的 mp 和 bookCount)
CREATE TABLE IF NOT EXISTS `shelf_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mp_enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否有文章收藏入口 (1=有)',
`book_count` INT UNSIGNED DEFAULT 0 COMMENT '可枚举电子书数量',
`album_count` INT UNSIGNED DEFAULT 0 COMMENT '有声书/专辑数量',
`total_count` INT UNSIGNED DEFAULT 0 COMMENT '书架总条目数 (books + albums + mp)',
`raw_json` LONGTEXT DEFAULT NULL COMMENT '原始 API 返回 JSON',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书架元信息';
-- 4. 书单/归档表(来自 /shelf/sync 的 archive[])
CREATE TABLE IF NOT EXISTS `archives` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) DEFAULT NULL COMMENT '书单名称',
`book_ids` LONGTEXT DEFAULT NULL COMMENT 'bookId 列表 (JSON 数组)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_archives_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书单/归档';
-- ============================================================
-- ===== 第二组:阅读统计数据 =====
-- ============================================================
-- 5. 阅读统计概要表(来自 /readdata/detail)
CREATE TABLE IF NOT EXISTS `reading_stats` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度: overall/annually/monthly/weekly',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识 (如 "overall" 或 "2026")',
`base_time` INT UNSIGNED DEFAULT NULL COMMENT '统计周期基准时间戳',
`base_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '统计周期基准时间 (可读格式)',
`total_read_time` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '总阅读时长 (秒)',
`read_days` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '有效阅读天数',
`day_average_read_time` DOUBLE DEFAULT 0 COMMENT '日均阅读时长 (秒)',
`compare` DOUBLE DEFAULT NULL COMMENT '与上周期对比比例 (正=增长)',
`regist_time` INT UNSIGNED DEFAULT NULL COMMENT '用户注册时间 (Unix 时间戳)',
`regist_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '用户注册时间 (可读格式)',
`record_reading_time` INT UNSIGNED DEFAULT 0 COMMENT '总朗读/记录类阅读时长 (秒)',
`read_rate` DOUBLE DEFAULT NULL COMMENT '文字阅读占比百分比',
`wr_read_time` INT UNSIGNED DEFAULT NULL COMMENT '文字阅读时长 (秒)',
`wr_listen_time` INT UNSIGNED DEFAULT NULL COMMENT '听书时长 (秒)',
`author_count` INT UNSIGNED DEFAULT NULL COMMENT '符合统计条件的作者总数',
`prefer_category_word` VARCHAR(128) DEFAULT NULL COMMENT '偏好分类文案 (如 "偏好阅读文学")',
`prefer_time_word` VARCHAR(128) DEFAULT NULL COMMENT '偏好时段文案 (如 "偏好上午阅读")',
`read_records_word` VARCHAR(64) DEFAULT NULL COMMENT '书籍分布模块标题文案',
`read_distribution_word` VARCHAR(64) DEFAULT NULL COMMENT '点评分布模块标题文案',
`read_time_gears` VARCHAR(128) DEFAULT NULL COMMENT '阅读时长档位 (JSON 数组)',
`style_type` VARCHAR(32) DEFAULT NULL COMMENT '样式类型 (如 normal)',
`raw_json` LONGTEXT DEFAULT NULL COMMENT '原始 API 返回 JSON',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_reading_stats_mode_period` (`mode`, `period`),
INDEX `idx_reading_stats_mode` (`mode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读统计概要';
-- 6. 阅读时长时间序列表(来自 /readdata/detail 的 readTimes 和 dailyReadTimes)
CREATE TABLE IF NOT EXISTS `read_times` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(30) NOT NULL COMMENT '统计维度 (含 _daily 后缀表示每日数据)',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`bucket_timestamp` INT UNSIGNED NOT NULL COMMENT '分桶起始时间戳',
`bucket_timestamp_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '分桶起始时间 (可读格式)',
`duration` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_read_times_mode_period` (`mode`, `period`),
INDEX `idx_read_times_bucket` (`bucket_timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读时长时间序列';
-- 7. 阅读时长排行表(来自 /readdata/detail 的 readLongest[])
CREATE TABLE IF NOT EXISTS `read_longest` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`read_time` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
`record_reading_time` INT UNSIGNED DEFAULT NULL COMMENT '朗读/记录类阅读时长 (秒)',
`tags` VARCHAR(512) DEFAULT NULL COMMENT '标签 (JSON 数组,如 ["笔记最多"])',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_read_longest_mode_period` (`mode`, `period`),
INDEX `idx_read_longest_book_id` (`book_id`),
INDEX `idx_read_longest_read_time` (`read_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读时长排行';
-- 8. 阅读统计摘要项表(来自 /readdata/detail 的 readStat[])
CREATE TABLE IF NOT EXISTS `read_stat_items` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`stat_name` VARCHAR(64) DEFAULT NULL COMMENT '统计项名称 (读过/读完/阅读/笔记)',
`counts` VARCHAR(64) DEFAULT NULL COMMENT '统计值文案 (如 "404本")',
`scheme` VARCHAR(512) DEFAULT NULL COMMENT 'App 跳转链接',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_read_stat_items_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读统计摘要项';
-- 9. 偏好分类表(来自 /readdata/detail 的 preferCategory[])
CREATE TABLE IF NOT EXISTS `prefer_categories` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`category_id` INT UNSIGNED DEFAULT NULL COMMENT '分类 ID',
`category_title` VARCHAR(128) DEFAULT NULL COMMENT '分类名称 (如 "文学")',
`parent_category_id` INT UNSIGNED DEFAULT NULL COMMENT '父分类 ID',
`parent_category_title` VARCHAR(128) DEFAULT NULL COMMENT '父分类名称 (如 "精品小说")',
`category_type` TINYINT DEFAULT 0 COMMENT '分类类型标记 (0=普通, 1/2=特殊)',
`val` DOUBLE DEFAULT 0 COMMENT '偏好权重 (归一化相对值)',
`reading_time` INT UNSIGNED DEFAULT 0 COMMENT '该分类阅读时长 (秒)',
`reading_count` INT UNSIGNED DEFAULT 0 COMMENT '该分类阅读本数',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_cat_mode_period` (`mode`, `period`),
INDEX `idx_prefer_cat_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='偏好阅读分类';
-- 10. 偏好作者表(来自 /readdata/detail 的 preferAuthor[])
CREATE TABLE IF NOT EXISTS `prefer_authors` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`author_id` INT UNSIGNED DEFAULT NULL COMMENT '作者 ID',
`name` VARCHAR(255) DEFAULT NULL COMMENT '作者名',
`count` INT UNSIGNED DEFAULT 0 COMMENT '阅读该作者的书本数',
`read_time` VARCHAR(64) DEFAULT NULL COMMENT '阅读时长 (格式化字符串,如 "5小时30分钟")',
`user_json` TEXT DEFAULT NULL COMMENT '作者关联用户信息 (JSON)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_author_mode_period` (`mode`, `period`),
INDEX `idx_prefer_author_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='偏好作者';
-- 11. 偏好出版社表(来自 /readdata/detail 的 preferPublisher[])
CREATE TABLE IF NOT EXISTS `prefer_publishers` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`name` VARCHAR(255) DEFAULT NULL COMMENT '出版社名',
`count` INT UNSIGNED DEFAULT 0 COMMENT '阅读该出版社书籍本数',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_pub_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='偏好出版社';
-- 12. 偏好版权方表(来自 /readdata/detail 的 preferCp[])
CREATE TABLE IF NOT EXISTS `prefer_cps` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`count` INT UNSIGNED DEFAULT 0 COMMENT '阅读该版权方书籍本数',
`cp_name` VARCHAR(255) DEFAULT NULL COMMENT '版权方名称',
`cp_user_vid` VARCHAR(64) DEFAULT NULL COMMENT '版权方用户 VID',
`cp_avatar` VARCHAR(512) DEFAULT NULL COMMENT '版权方头像 URL',
`cp_role` VARCHAR(64) DEFAULT NULL COMMENT '版权方角色',
`copyright_json` TEXT DEFAULT NULL COMMENT '版权方完整信息 (JSON)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_cp_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='偏好版权方';
-- 13. 偏好书籍卡片表(来自 /readdata/detail 的 preferBooks[])
CREATE TABLE IF NOT EXISTS `prefer_books` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`book_id` VARCHAR(64) DEFAULT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`reason` TEXT DEFAULT NULL COMMENT '推荐理由',
`prefer_type` VARCHAR(64) DEFAULT NULL COMMENT '偏好类型',
`book_json` TEXT DEFAULT NULL COMMENT '书籍完整信息 (JSON)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_books_mode_period` (`mode`, `period`),
INDEX `idx_prefer_books_book_id` (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='偏好书籍卡片';
-- 14. 24小时阅读时段分布表(来自 /readdata/detail 的 preferTime[])
CREATE TABLE IF NOT EXISTS `prefer_time` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`hour_index` TINYINT UNSIGNED NOT NULL COMMENT '小时 (0-23)',
`duration` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_prefer_time_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='24小时阅读时段分布';
-- 15. 好友阅读排行表(来自 /readdata/detail 的 rank)
CREATE TABLE IF NOT EXISTS `read_rank` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`rank_text` VARCHAR(255) DEFAULT NULL COMMENT '排行文案 (如 "朋友中排第3名")',
`scheme` VARCHAR(512) DEFAULT NULL COMMENT '排行跳转链接',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_read_rank_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='好友阅读排行';
-- 16. 勋章表(来自 /readdata/detail 的 medals[])
CREATE TABLE IF NOT EXISTS `medals` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`medal_json` TEXT DEFAULT NULL COMMENT '勋章信息 (JSON)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_medals_mode_period` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='勋章';
-- 17. 年度报告表(来自 /readdata/detail 的 yearReport[])
CREATE TABLE IF NOT EXISTS `year_reports` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL COMMENT '统计维度',
`period` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '周期标识',
`report_year` VARCHAR(10) DEFAULT NULL COMMENT '报告年份',
`report_json` TEXT DEFAULT NULL COMMENT '报告入口信息 (JSON)',
`monthly_times` VARCHAR(512) DEFAULT NULL COMMENT '12个月阅读时长 (JSON 数组,单位秒)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_year_reports_mode_period` (`mode`, `period`),
INDEX `idx_year_reports_year` (`report_year`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='年度报告';
-- ============================================================
-- ===== 第三组:笔记数据 =====
-- ============================================================
-- 18. 笔记本概览表(来自 /user/notebooks)
CREATE TABLE IF NOT EXISTS `notebooks` (
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`review_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '想法/点评数 (含划线想法、书评想法等)',
`note_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '划线数 (高亮标注原文条数)',
`bookmark_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '书签数 (标记阅读位置条数)',
`total_note_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '笔记总数 (reviewCount + noteCount + bookmarkCount)',
`reading_progress` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读进度 (0-100)',
`marked_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '标记状态 (1=读完)',
`sort` BIGINT DEFAULT NULL COMMENT '排序值 (最近笔记时间,用于翻页)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`book_id`),
INDEX `idx_notebooks_marked_status` (`marked_status`),
INDEX `idx_notebooks_sort` (`sort` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='笔记本概览';
-- 19. 划线内容表(来自 /book/bookmarklist 的 updated[])
CREATE TABLE IF NOT EXISTS `book_highlights` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`bookmark_id` VARCHAR(64) DEFAULT NULL COMMENT '划线唯一 ID',
`chapter_uid` INT UNSIGNED DEFAULT NULL COMMENT '所在章节 UID',
`mark_text` LONGTEXT DEFAULT NULL COMMENT '划线原文内容',
`create_time` INT UNSIGNED DEFAULT NULL COMMENT '创建时间 (Unix 时间戳)',
`create_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间 (可读格式)',
`type` TINYINT DEFAULT NULL COMMENT '类型 (1=划线)',
`range_text` VARCHAR(64) DEFAULT NULL COMMENT '位置范围 (如 "2959-3007")',
`color_style` TINYINT DEFAULT NULL COMMENT '划线颜色样式',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_highlights_bookmark` (`book_id`, `bookmark_id`),
INDEX `idx_highlights_book_id` (`book_id`),
INDEX `idx_highlights_chapter` (`book_id`, `chapter_uid`),
INDEX `idx_highlights_create_time` (`create_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='划线内容';
-- 20. 章节信息表(来自 /book/chapterinfo 和 /book/bookmarklist 的 chapters)
CREATE TABLE IF NOT EXISTS `book_chapters` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`chapter_uid` INT UNSIGNED NOT NULL COMMENT '章节 UID',
`chapter_idx` INT UNSIGNED DEFAULT NULL COMMENT '章节序号',
`title` VARCHAR(255) DEFAULT NULL COMMENT '章节标题',
`word_count` INT UNSIGNED DEFAULT NULL COMMENT '章节字数',
`level` TINYINT DEFAULT NULL COMMENT '目录层级 (1=一级标题, 2=二级)',
`update_time` INT UNSIGNED DEFAULT NULL COMMENT '章节更新时间 (Unix 时间戳)',
`update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '章节更新时间 (可读格式)',
`price` INT UNSIGNED DEFAULT 0 COMMENT '章节价格 (0=免费)',
`paid` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已购买 (1=已购买)',
`is_mp_chapter` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否公众号章节 (1=是)',
`anchors` TEXT DEFAULT NULL COMMENT '章节内锚点/子标题 (JSON 数组)',
`synckey` INT UNSIGNED DEFAULT NULL COMMENT '同步 key (版本号)',
`chapter_update_time` INT UNSIGNED DEFAULT NULL COMMENT '章节列表最后更新时间 (Unix 时间戳)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_book_chapter` (`book_id`, `chapter_uid`),
INDEX `idx_chapters_book_idx` (`book_id`, `chapter_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='章节信息';
-- 21. 个人想法/点评表(来自 /review/list/mine)
CREATE TABLE IF NOT EXISTS `book_reviews` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`review_id` VARCHAR(64) DEFAULT NULL COMMENT '想法唯一 ID',
`content` LONGTEXT DEFAULT NULL COMMENT '想法内容文本',
`abstract` LONGTEXT DEFAULT NULL COMMENT '想法对应的划线原文 (仅划线想法有值)',
`range_text` VARCHAR(64) DEFAULT NULL COMMENT '划线原文位置范围 (如 "2959-3007")',
`chapter_uid` INT UNSIGNED DEFAULT NULL COMMENT '章节 UID',
`chapter_idx` INT UNSIGNED DEFAULT NULL COMMENT '章节序号',
`chapter_name` VARCHAR(255) DEFAULT NULL COMMENT '所在章节名 (章节点评时有值)',
`create_time` INT UNSIGNED DEFAULT NULL COMMENT '创建时间 (Unix 时间戳)',
`create_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间 (可读格式)',
`star` TINYINT DEFAULT -1 COMMENT '评分 (0-5, -1=无评分)',
`is_finish` TINYINT(1) DEFAULT 0 COMMENT '是否书评 (1=书评)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_reviews_review_id` (`review_id`),
INDEX `idx_reviews_book_id` (`book_id`),
INDEX `idx_reviews_chapter` (`book_id`, `chapter_uid`),
INDEX `idx_reviews_create_time` (`create_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='个人想法/点评';
-- 22. 热门划线表(来自 /book/bestbookmarks)
CREATE TABLE IF NOT EXISTS `book_best_bookmarks` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`bookmark_id` VARCHAR(64) DEFAULT NULL COMMENT '划线唯一 ID',
`chapter_uid` INT UNSIGNED DEFAULT NULL COMMENT '所在章节 UID',
`range_text` VARCHAR(64) DEFAULT NULL COMMENT '划线位置范围 (如 "393-401")',
`mark_text` LONGTEXT DEFAULT NULL COMMENT '划线原文文本',
`total_count` INT UNSIGNED DEFAULT 0 COMMENT '划线人数',
`user_vid` VARCHAR(64) DEFAULT NULL COMMENT '代表用户 VID',
`simplified_range` VARCHAR(64) DEFAULT NULL COMMENT '简体书籍的 range (繁简体书专属)',
`traditional_range` VARCHAR(64) DEFAULT NULL COMMENT '繁体书籍的 range (繁简体书专属)',
`synckey` INT UNSIGNED DEFAULT NULL COMMENT '同步 key (数据版本号)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_best_bm_book_bookmark` (`book_id`, `bookmark_id`),
INDEX `idx_best_bm_book_id` (`book_id`),
INDEX `idx_best_bm_total_count` (`total_count` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='热门划线';
-- 23. 划线热度统计表(来自 /book/underlines)
CREATE TABLE IF NOT EXISTS `book_underlines` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`chapter_uid` INT UNSIGNED NOT NULL COMMENT '章节 UID',
`range_text` VARCHAR(64) DEFAULT NULL COMMENT '划线位置范围 (如 "393-401")',
`count` INT UNSIGNED DEFAULT 0 COMMENT '划线人数',
`score` DOUBLE DEFAULT 0 COMMENT '热度分数',
`type` TINYINT DEFAULT NULL COMMENT '划线类型',
`synckey` INT UNSIGNED DEFAULT NULL COMMENT '同步 key',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_underlines_book_ch_range` (`book_id`, `chapter_uid`, `range_text`),
INDEX `idx_underlines_book_chapter` (`book_id`, `chapter_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='划线热度统计';
-- 24. 公开点评表(来自 /review/list)
CREATE TABLE IF NOT EXISTS `public_reviews` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`review_id` VARCHAR(64) DEFAULT NULL COMMENT '点评唯一 ID',
`content` LONGTEXT DEFAULT NULL COMMENT '点评文本内容',
`html_content` LONGTEXT DEFAULT NULL COMMENT '点评 HTML 富文本内容',
`star` TINYINT DEFAULT -1 COMMENT '评分 (20=一星, 40=二星, 60=三星, 80=四星, 100=五星)',
`is_finish` TINYINT(1) DEFAULT 0 COMMENT '是否读完此书 (1=读完)',
`create_time` INT UNSIGNED DEFAULT NULL COMMENT '创建时间 (Unix 时间戳)',
`create_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间 (可读格式)',
`chapter_name` VARCHAR(255) DEFAULT NULL COMMENT '所在章节名 (章节点评时有值)',
`author_vid` VARCHAR(64) DEFAULT NULL COMMENT '评论者用户 VID',
`author_name` VARCHAR(255) DEFAULT NULL COMMENT '评论者昵称',
`author_avatar` VARCHAR(512) DEFAULT NULL COMMENT '评论者头像 URL',
`review_list_type` TINYINT DEFAULT 0 COMMENT '筛选类型 (0=全部, 1=推荐, 2=不行, 3=最新, 4=一般)',
`idx` INT UNSIGNED DEFAULT NULL COMMENT '序号 (用于翻页)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_public_reviews_review_id` (`review_id`),
INDEX `idx_public_reviews_book_id` (`book_id`),
INDEX `idx_public_reviews_star` (`star`),
INDEX `idx_public_reviews_create_time` (`create_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公开点评';
-- ============================================================
-- ===== 第四组:书籍详情 =====
-- ============================================================
-- 25. 书籍详细信息表(来自 /book/info)
CREATE TABLE IF NOT EXISTS `book_details` (
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`translator` VARCHAR(255) DEFAULT NULL COMMENT '译者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`intro` LONGTEXT DEFAULT NULL COMMENT '简介',
`category` VARCHAR(128) DEFAULT NULL COMMENT '分类',
`publisher` VARCHAR(255) DEFAULT NULL COMMENT '出版社',
`publish_time` VARCHAR(32) DEFAULT NULL COMMENT '出版时间',
`isbn` VARCHAR(32) DEFAULT NULL COMMENT 'ISBN 号',
`word_count` INT UNSIGNED DEFAULT 0 COMMENT '总字数',
`new_rating` DECIMAL(5,1) DEFAULT 0 COMMENT '评分 (百分制)',
`new_rating_count` INT UNSIGNED DEFAULT 0 COMMENT '评分人数',
`new_rating_detail` TEXT DEFAULT NULL COMMENT '评分分布详情 (JSON)',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '跳转链接',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`book_id`),
INDEX `idx_book_details_isbn` (`isbn`),
INDEX `idx_book_details_category` (`category`),
INDEX `idx_book_details_publisher` (`publisher`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书籍详细信息';
-- 26. 阅读进度表(来自 /book/getprogress)
CREATE TABLE IF NOT EXISTS `book_progress` (
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`progress` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读进度百分比 (0-100)',
`chapter_uid` INT UNSIGNED DEFAULT NULL COMMENT '当前阅读章节 UID',
`chapter_offset` INT UNSIGNED DEFAULT NULL COMMENT '当前章节内偏移量',
`update_time` INT UNSIGNED DEFAULT NULL COMMENT '最后阅读时间 (Unix 时间戳)',
`update_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '最后阅读时间 (可读格式)',
`record_reading_time` INT UNSIGNED DEFAULT 0 COMMENT '累计阅读时长 (秒)',
`finish_time` INT UNSIGNED DEFAULT NULL COMMENT '读完时间 (Unix 时间戳)',
`finish_time_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '读完时间 (可读格式)',
`is_start_reading` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已开始阅读 (1=是)',
`server_timestamp` INT UNSIGNED DEFAULT NULL COMMENT '服务端时间戳',
`server_timestamp_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '服务端时间 (可读格式)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`book_id`),
INDEX `idx_progress_finish_time` (`finish_time` DESC),
INDEX `idx_progress_update_time` (`update_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读进度';
-- ============================================================
-- ===== 第五组:发现/推荐 =====
-- ============================================================
-- 27. 推荐书籍表(来自 /book/recommend)
CREATE TABLE IF NOT EXISTS `recommended_books` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`intro` TEXT DEFAULT NULL COMMENT '书籍简介',
`category` VARCHAR(128) DEFAULT NULL COMMENT '分类',
`reason` VARCHAR(512) DEFAULT NULL COMMENT '推荐理由',
`reading_count` INT UNSIGNED DEFAULT 0 COMMENT '在读人数',
`new_rating` DECIMAL(5,1) DEFAULT 0 COMMENT '评分 (百分制)',
`new_rating_count` INT UNSIGNED DEFAULT 0 COMMENT '评分人数',
`rating_title` VARCHAR(32) DEFAULT NULL COMMENT '评分标签 (神作/力荐等)',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '跳转链接',
`search_idx` INT UNSIGNED DEFAULT 0 COMMENT '结果序号 (用于翻页)',
`price` INT UNSIGNED DEFAULT NULL COMMENT '价格 (分)',
`pay_type` INT UNSIGNED DEFAULT NULL COMMENT '付费类型',
`book_type` TINYINT DEFAULT 0 COMMENT '书籍类型 (0=电子书)',
`batch_id` VARCHAR(32) DEFAULT NULL COMMENT '推荐批次 ID (同一次推荐请求的标识)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_recommended_book_id` (`book_id`),
INDEX `idx_recommended_batch` (`batch_id`),
INDEX `idx_recommended_rating` (`new_rating` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推荐书籍';
-- 28. 相似书推荐表(来自 /book/similar)
CREATE TABLE IF NOT EXISTS `similar_books` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`source_book_id` VARCHAR(64) NOT NULL COMMENT '源书籍 ID',
`book_id` VARCHAR(64) NOT NULL COMMENT '推荐书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '跳转链接',
`idx` INT UNSIGNED DEFAULT NULL COMMENT '结果序号 (用于翻页)',
`session_id` VARCHAR(64) DEFAULT NULL COMMENT '翻页会话 ID',
`book_json` TEXT DEFAULT NULL COMMENT '书籍完整信息 (JSON)',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_similar_source` (`source_book_id`),
INDEX `idx_similar_book_id` (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='相似书推荐';
-- 29. 搜索会话表(来自 /store/search 的元数据)
CREATE TABLE IF NOT EXISTS `search_sessions` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sid` VARCHAR(64) DEFAULT NULL COMMENT '搜索会话 ID',
`keyword` VARCHAR(255) NOT NULL COMMENT '搜索关键词',
`scope` INT UNSIGNED DEFAULT NULL COMMENT '搜索类型 (0=全部, 10=电子书, 14=听书等)',
`has_more` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否有更多 (1=有)',
`max_idx` INT UNSIGNED DEFAULT 0 COMMENT '当前翻页偏移',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_search_sessions_keyword` (`keyword`),
INDEX `idx_search_sessions_sid` (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='搜索会话';
-- 30. 搜索结果表(来自 /store/search 的 results[].books[])
CREATE TABLE IF NOT EXISTS `search_results` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`session_id` BIGINT DEFAULT NULL COMMENT '关联搜索会话 ID',
`keyword` VARCHAR(255) NOT NULL COMMENT '搜索关键词',
`book_id` VARCHAR(64) NOT NULL COMMENT '书籍 ID',
`title` VARCHAR(255) DEFAULT NULL COMMENT '书名',
`author` VARCHAR(255) DEFAULT NULL COMMENT '作者',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '封面图 URL',
`intro` TEXT DEFAULT NULL COMMENT '书籍简介',
`publisher` VARCHAR(255) DEFAULT NULL COMMENT '出版社',
`category` VARCHAR(128) DEFAULT NULL COMMENT '分类',
`reading_count` INT UNSIGNED DEFAULT 0 COMMENT '在读人数',
`new_rating` DECIMAL(5,1) DEFAULT 0 COMMENT '评分 (百分制)',
`new_rating_count` INT UNSIGNED DEFAULT 0 COMMENT '评分人数',
`rating_title` VARCHAR(32) DEFAULT NULL COMMENT '评分标签',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '跳转链接',
`pay_type` INT UNSIGNED DEFAULT NULL COMMENT '付费类型',
`price` INT UNSIGNED DEFAULT NULL COMMENT '价格 (分)',
`soldout` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否下架 (1=下架)',
`search_idx` INT UNSIGNED DEFAULT 0 COMMENT '搜索序号 (用于翻页)',
`result_scope` INT UNSIGNED DEFAULT NULL COMMENT '回包分组类型',
`result_title` VARCHAR(64) DEFAULT NULL COMMENT '回包分组标题 (如 "电子书")',
`scope_count` INT UNSIGNED DEFAULT NULL COMMENT '该分组总结果数',
`current_count` INT UNSIGNED DEFAULT NULL COMMENT '本次返回数量',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
INDEX `idx_search_results_keyword` (`keyword`),
INDEX `idx_search_results_book_id` (`book_id`),
INDEX `idx_search_results_session` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='搜索结果';
-- ============================================================
-- ===== 第六组:系统表 =====
-- ============================================================
-- 31. 数据采集元信息表
CREATE TABLE IF NOT EXISTS `fetch_meta` (
`key` VARCHAR(64) NOT NULL COMMENT '元信息键名',
`value` TEXT DEFAULT NULL COMMENT '元信息值',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据采集元信息';