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 批次标识
This commit is contained in:
admin committed 2026-07-17 10:37:07 +08:00
1 parent 507b9c5704
commit 2a809eb7cc
5 files changed
+1595 -864

No files matched your search

+587 -272
View File
@@ -1,7 +1,13 @@
-- ============================================================
-- 微信读书数据展示网站 - MySQL 版本建表语句
-- 适用于后续从 SQLite 迁移至 MySQL
-- 字符集: utf8mb4 (支持完整 Unicode,包括 emoji)
-- 微信读书数据展示网站 - 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`
@@ -11,315 +17,624 @@ CREATE DATABASE IF NOT EXISTS `weread_dashboard`
USE `weread_dashboard`;
-- ============================================================
-- 1. 书架书籍表
-- ===== 第一组:书架数据 =====
-- ============================================================
-- 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 时间戳)',
`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 时间戳)',
`deep_link` VARCHAR(512) DEFAULT NULL COMMENT '深度链接',
`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_read_update_time` (`read_update_time` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='书架书籍信息';
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. 阅读统计概要表
-- ============================================================
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 '周期标识',
`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 '日均阅读时长 (秒)',
`regist_time` INT UNSIGNED DEFAULT NULL COMMENT '用户注册时间 (Unix 时间戳)',
`raw_json` LONGTEXT DEFAULT NULL COMMENT '原始 API 返回 JSON',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 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_reading_stats_mode` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='阅读统计概要';
INDEX `idx_archives_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='书单/归档';
-- ============================================================
-- 3. 阅读时长时间序列(按年/月/日分桶)
-- ===== 第二组:阅读统计数据 =====
-- ============================================================
-- 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 '',
`bucket_timestamp` INT UNSIGNED NOT NULL COMMENT '分桶起始时间戳',
`duration` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
`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='阅读时长时间序列';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阅读时长时间序列';
-- ============================================================
-- 4. 阅读时长最久的书籍排行
-- ============================================================
-- 7. 阅读时长排行表(来自 /readdata/detail 的 readLongest[])
CREATE TABLE IF NOT EXISTS `read_longest` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL,
`period` VARCHAR(20) NOT NULL DEFAULT '',
`book_id` VARCHAR(64) NOT NULL,
`title` VARCHAR(255) DEFAULT NULL,
`author` VARCHAR(255) DEFAULT NULL,
`cover` VARCHAR(512) DEFAULT NULL,
`read_time` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
`tags` VARCHAR(512) DEFAULT NULL COMMENT '标签 JSON 数组',
`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` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='阅读时长排行';
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='阅读时长排行';
-- ============================================================
-- 5. 偏好分类
-- ============================================================
CREATE TABLE IF NOT EXISTS `prefer_categories` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL,
`period` VARCHAR(20) NOT NULL DEFAULT '',
`category_id` INT UNSIGNED DEFAULT NULL,
`category_title` VARCHAR(128) DEFAULT NULL,
`parent_category_title` VARCHAR(128) DEFAULT NULL,
`val` DOUBLE DEFAULT 0 COMMENT '偏好权重',
`reading_time` INT UNSIGNED DEFAULT 0 COMMENT '该分类阅读时长 (秒)',
`reading_count` INT UNSIGNED DEFAULT 0 COMMENT '该分类阅读本数',
PRIMARY KEY (`id`),
INDEX `idx_prefer_cat_mode` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='偏好阅读分类';
-- ============================================================
-- 6. 偏好作者
-- ============================================================
CREATE TABLE IF NOT EXISTS `prefer_authors` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL,
`period` VARCHAR(20) NOT NULL DEFAULT '',
`author_id` INT UNSIGNED DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`count` INT UNSIGNED DEFAULT 0 COMMENT '阅读该作者的书本数',
`read_time` VARCHAR(64) DEFAULT NULL COMMENT '阅读时长 (格式化字符串)',
PRIMARY KEY (`id`),
INDEX `idx_prefer_author_mode` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='偏好作者';
-- ============================================================
-- 7. 24小时阅读时段分布
-- ============================================================
CREATE TABLE IF NOT EXISTS `prefer_time` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL,
`period` VARCHAR(20) NOT NULL DEFAULT '',
`hour_index` TINYINT UNSIGNED NOT NULL COMMENT '小时 (0-23)',
`duration` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读时长 (秒)',
PRIMARY KEY (`id`),
INDEX `idx_prefer_time_mode` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='24小时阅读时段分布';
-- ============================================================
-- 8. 笔记本概览
-- ============================================================
CREATE TABLE IF NOT EXISTS `notebooks` (
`book_id` VARCHAR(64) NOT NULL,
`title` VARCHAR(255) DEFAULT NULL,
`author` VARCHAR(255) DEFAULT NULL,
`cover` VARCHAR(512) DEFAULT NULL,
`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 '书签数',
`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 '排序值',
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='笔记本概览';
-- ============================================================
-- 9. 阅读统计摘要项
-- ============================================================
-- 8. 阅读统计摘要项表(来自 /readdata/detail 的 readStat[])
CREATE TABLE IF NOT EXISTS `read_stat_items` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`mode` VARCHAR(20) NOT NULL,
`period` VARCHAR(20) NOT NULL DEFAULT '',
`stat_name` VARCHAR(64) DEFAULT NULL COMMENT '统计项名称 (读过/读完/阅读/笔记)',
`counts` VARCHAR(64) DEFAULT NULL COMMENT '统计值文案',
`scheme` VARCHAR(512) DEFAULT NULL COMMENT 'App 跳转链接',
`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` (`mode`, `period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='阅读统计摘要项';
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='年度报告';
-- ============================================================
-- 10. 书单/归档
-- ===== 第三组:笔记数据 =====
-- ============================================================
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 数组',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='书单/归档';
-- ============================================================
-- 11. 数据采集元信息
-- ============================================================
CREATE TABLE IF NOT EXISTS `fetch_meta` (
`key` VARCHAR(64) NOT NULL,
`value` TEXT DEFAULT NULL,
PRIMARY KEY (`key`)
) 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='笔记本概览';
-- ============================================================
-- 12. 书籍详细信息(按需获取,来自 /book/info)
-- ============================================================
CREATE TABLE IF NOT EXISTS `book_details` (
`book_id` VARCHAR(64) NOT NULL,
`title` VARCHAR(255) DEFAULT NULL,
`author` VARCHAR(255) DEFAULT NULL,
`translator` VARCHAR(255) DEFAULT NULL COMMENT '译者',
`cover` VARCHAR(512) DEFAULT NULL,
`intro` LONGTEXT DEFAULT NULL COMMENT '简介',
`category` VARCHAR(128) DEFAULT NULL,
`publisher` VARCHAR(255) DEFAULT NULL,
`publish_time` VARCHAR(32) DEFAULT NULL COMMENT '出版时间',
`isbn` VARCHAR(32) DEFAULT NULL,
`word_count` INT UNSIGNED DEFAULT 0 COMMENT '总字数',
`new_rating` DECIMAL(5,1) DEFAULT 0 COMMENT '评分 (百分制)',
`new_rating_count` INT UNSIGNED DEFAULT 0 COMMENT '评分人数',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '获取时间',
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='书籍详细信息';
-- ============================================================
-- 13. 阅读进度(按需获取,来自 /book/getprogress)
-- ============================================================
CREATE TABLE IF NOT EXISTS `book_progress` (
`book_id` VARCHAR(64) NOT NULL,
`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 时间戳)',
`record_reading_time` INT UNSIGNED DEFAULT 0 COMMENT '累计阅读时长 (秒)',
`finish_time` INT UNSIGNED DEFAULT NULL COMMENT '读完时间 (Unix 时间戳)',
`is_start_reading` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已开始阅读',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='阅读进度';
-- ============================================================
-- 14. 划线内容(按需获取,来自 /book/bookmarklist)
-- ============================================================
-- 19. 划线内容表(来自 /book/bookmarklist 的 updated[])
CREATE TABLE IF NOT EXISTS `book_highlights` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL,
`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 时间戳)',
`type` TINYINT DEFAULT NULL COMMENT '类型',
`range_text` VARCHAR(64) DEFAULT NULL COMMENT '位置范围',
`color_style` TINYINT DEFAULT NULL COMMENT '划线颜色样式',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='划线内容';
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='划线内容';
-- ============================================================
-- 15. 章节信息(来自 /book/bookmarklist 的 chapters)
-- ============================================================
-- 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,
`chapter_uid` INT UNSIGNED NOT NULL,
`chapter_idx` INT UNSIGNED DEFAULT NULL COMMENT '章节序号',
`title` VARCHAR(255) DEFAULT NULL COMMENT '章节标题',
`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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='章节信息';
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='章节信息';
-- ============================================================
-- 16. 个人想法/点评(按需获取,来自 /review/list/mine)
-- ============================================================
-- 21. 个人想法/点评表(来自 /review/list/mine)
CREATE TABLE IF NOT EXISTS `book_reviews` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`book_id` VARCHAR(64) NOT NULL,
`review_id` VARCHAR(64) DEFAULT NULL COMMENT '想法唯一 ID',
`content` LONGTEXT DEFAULT NULL COMMENT '内容文本',
`create_time` INT UNSIGNED DEFAULT NULL COMMENT '创建时间 (Unix 时间戳)',
`star` TINYINT DEFAULT -1 COMMENT '评分 (0-5, -1=无评分)',
`chapter_name` VARCHAR(255) DEFAULT NULL COMMENT '所在章节名',
`is_finish` TINYINT(1) DEFAULT 0 COMMENT '是否书评',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`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`),
INDEX `idx_reviews_book_id` (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='个人想法/点评';
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='公开点评';
-- ============================================================
-- 17. 推荐书籍(按需获取,来自 /book/recommend)
-- ===== 第四组:书籍详情 =====
-- ============================================================
-- 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,
`title` VARCHAR(255) DEFAULT NULL,
`author` VARCHAR(255) DEFAULT NULL,
`cover` VARCHAR(512) DEFAULT NULL,
`intro` TEXT DEFAULT NULL,
`category` VARCHAR(128) DEFAULT NULL,
`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 '评分标签 (神作/力荐等)',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`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_fetched` (`fetched_at` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='推荐书籍';
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='搜索结果';
-- ============================================================
-- 18. 搜索结果(按需获取,来自 /store/search)
-- ===== 第六组:系统表 =====
-- ============================================================
CREATE TABLE IF NOT EXISTS `search_results` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`keyword` VARCHAR(255) NOT NULL COMMENT '搜索关键词',
`book_id` VARCHAR(64) NOT NULL,
`title` VARCHAR(255) DEFAULT NULL,
`author` VARCHAR(255) DEFAULT NULL,
`cover` VARCHAR(512) DEFAULT NULL,
`intro` TEXT DEFAULT NULL,
`publisher` VARCHAR(255) DEFAULT NULL,
`category` VARCHAR(128) DEFAULT NULL,
`reading_count` INT UNSIGNED DEFAULT 0,
`new_rating` DECIMAL(5,1) DEFAULT 0,
`new_rating_count` INT UNSIGNED DEFAULT 0,
`rating_title` VARCHAR(32) DEFAULT NULL,
`search_idx` INT UNSIGNED DEFAULT 0 COMMENT '搜索序号',
`fetched_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_search_keyword` (`keyword`),
INDEX `idx_search_book_id` (`book_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='数据采集元信息';