-- ============================================================ -- 微信读书数据展示网站 - MySQL 建表语句 -- ============================================================ -- 设计规范: -- 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='数据采集元信息';