database-structure.md 13 KB

AI有声书生成工具 - 数据结构文档

一、总体架构

系统采用 书籍体系学习路径体系 两套并行的内容管理架构:

┌─────────────────────────────────────────────────────────────┐
│                      书籍体系(有声书生成)                     │
│  Book → BookChapter → Audio                                 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│                    学习路径体系(课程学习)                     │
│  LearningPath → Subject → Chapter → Section → ContentBlock │
└─────────────────────────────────────────────────────────────┘

二、书籍体系

2.1 Book(书籍表)

存储书籍的元信息,包括标题、描述、大纲、进度等。

字段 类型 说明
id int 书籍ID,自增主键
userId int 用户ID(可为空)
title varchar(191) 书名
subtitle varchar(191) 副标题
description text 书籍描述
targetAudience varchar(191) 目标读者,默认"通用"
style varchar(191) 风格,如"专业严谨"
totalChapters int 总章节数
estimatedWords int 预估总字数
status varchar(191) 状态:draft/completed/generating/failed
progress int 生成进度(百分比)
outlineJson longtext 大纲JSON,结构见下方
foreword text 前言
afterword text 后记
errorMsg text 错误信息
albumId int 对应专辑ID(外键)
createdAt datetime 创建时间
updatedAt datetime 更新时间

outlineJson 结构

{
  "mainTheme": "书籍主题",
  "structureLogic": "结构逻辑说明",
  "chapters": [
    {
      "number": 1,
      "title": "第一章:xxx",
      "summary": "章节摘要",
      "keyPoints": ["知识点1", "知识点2"],
      "estimatedWords": 2800,
      "stories": []
    }
  ]
}

2.2 BookChapter(书籍章节表)

存储书籍的章节信息,keyPoints 字段存储该章节下的小节列表(JSON数组格式),形成事实上的三级目录结构。

字段 类型 说明
id int 章节ID,自增主键
bookId int 所属书籍ID(外键→Book)
number int 章节序号
title varchar(191) 章节标题
summary text 章节摘要
keyPoints text 小节列表(JSON数组),三级目录
estimatedWords int 预估字数
content longtext 章节正文内容
wordCount int 实际字数
status varchar(191) 状态:pending/completed/failed
errorMsg text 错误信息
generatedAt datetime 生成时间
audioId int 对应音频ID(外键→Audio)

keyPoints 示例

["数据库与文件系统的本质差异", "三级模式与两级数据独立性", "DBMS的功能组成与典型架构", "数据模型的三大类别与对比"]

三级目录结构

Book(书)
  └── BookChapter(章)- 一级目录
        └── keyPoints(小节)- 二级目录(JSON数组)

2.3 Audio(音频表)

存储生成的音频文件信息。

字段 类型 说明
id int 音频ID,自增主键
userId int 用户ID
title varchar(191) 音频标题
text text 文本内容
summary text 摘要
tags text 标签
audioUrl text 音频文件URL
audioDuration int 音频时长(秒)
audioSize int 音频大小(字节)
wordCount int 字数
voiceId varchar(191) 音色ID
voiceParams text 音色参数
status varchar(191) 状态:processing/completed/failed
isFavorite tinyint 是否收藏(0/1)
categoryId int 分类ID(外键→Category)
albumId int 所属专辑ID(外键→Album)
createdAt datetime 创建时间
updatedAt datetime 更新时间

2.4 Album(专辑表)

用于组织和管理音频/书籍内容。

字段 类型 说明
id int 专辑ID,自增主键
userId int 用户ID
name varchar(191) 专辑名称
description text 专辑描述
coverUrl varchar(191) 封面图片URL
type varchar(191) 类型:audio/book/video
status varchar(191) 状态
createdAt datetime 创建时间
updatedAt datetime 更新时间

2.5 AlbumAudio(专辑音频关联表)

字段 类型 说明
id int 主键
albumId int 专辑ID(外键→Album)
audioId int 音频ID(外键→Audio)
orderIndex int 排序顺序

三、学习路径体系

适用于课程学习场景,采用完整的多层级结构。

3.1 LearningPath(学习路径表)

字段 类型 说明
id int 主键
userId int 用户ID
topic text 学习主题,如"机器学习"
status varchar(191) 状态
progress int 进度
totalCount int 总数
completedCount int 已完成数
currentStep varchar(191) 当前步骤
generationMode varchar(191) 生成模式:progressive
createdAt datetime 创建时间
updatedAt datetime 更新时间

3.2 Subject(科目表)

属于某个学习路径的科目/一级目录。

字段 类型 说明
id int 主键
learningPathId int 所属学习路径ID(外键→LearningPath)
name varchar(191) 科目名称
orderIndex int 排序顺序
status varchar(191) 状态
aiResponse text AI响应(JSON数组,存储子章节列表)
createdAt datetime 创建时间
updatedAt datetime 更新时间

aiResponse 示例

["心理学导论", "统计学基础", "人体解剖学", "生理心理学", "认知心理学"]

3.3 Chapter(章节表)

属于某个科目的章节/二级目录。

字段 类型 说明
id int 主键
subjectId int 所属科目ID(外键→Subject)
name varchar(191) 章节名称
orderIndex int 排序顺序
status varchar(191) 状态
aiResponse text AI响应(JSON数组,存储小节列表)
createdAt datetime 创建时间
updatedAt datetime 更新时间

aiResponse 示例

[
  "第一章 心理学概述:心理学的研究对象、任务与方法",
  "第二章 心理学的生物学基础:神经系统的结构与功能",
  "第三章 感觉与知觉:感知觉的基本原理与现象"
]

3.4 Section(小节表)

属于某个章节的小节/三级目录。

字段 类型 说明
id int 主键
chapterId int 所属章节ID(外键→Chapter)
name varchar(191) 小节名称
orderIndex int 排序顺序
status varchar(191) 状态
aiResponse text AI响应(JSON数组,存储内容块列表)
createdAt datetime 创建时间
updatedAt datetime 更新时间

aiResponse 示例

[
  {"section": "课程概述与目标", "content": "介绍本章的学习目标..."},
  {"section": "学习规划的基本概念", "content": "讲解学习规划的定义..."}
]

3.5 ContentBlock(内容块表)

小节下的具体内容。

字段 类型 说明
id int 主键
sectionId int 所属小节ID(外键→Section)
content text 内容文本
orderIndex int 排序顺序
wordCount int 字数
createdAt datetime 创建时间
updatedAt datetime 更新时间

四、学习路径五级目录结构

LearningPath(学习路径/书本)
  └── Subject(科目/一级目录)
        └── Chapter(章节/二级目录)
              └── Section(小节/三级目录)
                    └── ContentBlock(内容块/四级目录)

五、核心关系图

┌──────────────────────────────────────────────────────────────────┐
│                          书籍体系                                │
│                                                               │
│  Book ──────< BookChapter ──────< Audio                         │
│    │                │              │                          │
│    │                │              │                          │
│    └────> Album <───┴───> AlbumAudio                          │
│                                                               │
└──────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────┐
│                        学习路径体系                               │
│                                                               │
│  LearningPath ──< Subject ──< Chapter ──< Section ──< ContentBlock│
│                                                               │
└──────────────────────────────────────────────────────────────────┘

六、状态字段说明

Book/BookChapter 状态流转

draft → generating → completed
                  ↘ failed
状态 含义
draft 草稿/待生成
generating 生成中
completed 已完成
failed 生成失败

Audio 状态

状态 含义
processing 处理中
completed 已完成
failed 失败

Subject/Chapter/Section 状态

状态 含义
pending 等待生成
generating 生成中
completed 已完成
failed 失败
confirmed 已确认

七、索引设计

表名 索引 用途
Book Book_userId_status_idx 按用户和状态查询
Book Book_createdAt_idx 按创建时间排序
Book Book_albumId_key 唯一索引,关联专辑
BookChapter BookChapter_bookId_number_key 唯一索引,书籍+序号
BookChapter BookChapter_bookId_idx 查询某书籍的所有章节
BookChapter BookChapter_audioId_key 唯一索引,关联音频
Audio Audio_userId_createdAt_idx 用户音频列表
Audio Audio_userId_isFavorite_idx 用户收藏列表
Audio Audio_categoryId_idx 分类查询
Audio Audio_albumId_idx 专辑内音频查询
Subject Subject_learningPathId_orderIndex_idx 学习路径下的科目排序
Chapter Chapter_subjectId_orderIndex_idx 科目下的章节排序
Section Section_chapterId_orderIndex_idx 章节下的小节排序
ContentBlock ContentBlock_sectionId_orderIndex_idx 小节下的内容排序

八、常用查询示例

查询某书籍的所有章节

SELECT * FROM BookChapter WHERE bookId = 1 ORDER BY number;

查询某章节下的所有小节(keyPoints)

SELECT id, number, title, summary, keyPoints
FROM BookChapter
WHERE bookId = 1 AND number = 1;

查询某专辑下的所有音频

SELECT a.* FROM Audio a
JOIN AlbumAudio aa ON a.id = aa.audioId
WHERE aa.albumId = 1
ORDER BY aa.orderIndex;

查询某学习路径的完整结构

SELECT lp.topic, s.name as subject, c.name as chapter, sc.name as section
FROM LearningPath lp
JOIN Subject s ON s.learningPathId = lp.id
JOIN Chapter c ON c.subjectId = s.id
JOIN Section sc ON sc.chapterId = c.id
WHERE lp.id = 1
ORDER BY s.orderIndex, c.orderIndex, sc.orderIndex;