CREATE TABLE user ( user_id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名(学号/工号)', password VARCHAR(100) NOT NULL COMMENT '加密存储', role ENUM('student','teacher','admin') NOT NULL COMMENT '角色类型', interest_tags JSON COMMENT '兴趣标签(如["编程","生物"])[4](@ref)', ability_level JSON COMMENT '能力维度评分(如{"数学":85,"逻辑":78})[6](@ref)', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE learning_resource ( resource_id VARCHAR(36) PRIMARY KEY, title VARCHAR(200) NOT NULL, type ENUM('video','document','quiz','project') NOT NULL COMMENT '资源类型', difficulty TINYINT CHECK (difficulty BETWEEN 1 AND 5) COMMENT '难度等级(1-5星)', subject_id VARCHAR(36) NOT NULL COMMENT '关联学科ID', prerequisite JSON COMMENT '前置知识点(如["向量运算","导数"])[3](@ref)', related_subjects JSON COMMENT '跨学科关联(如["生物信息学","数据科学"])[3](@ref)', duration INT COMMENT '预估学习时长(分钟)', FOREIGN KEY (subject_id) REFERENCES subject(subject_id) ); CREATE TABLE learning_path ( path_id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) NOT NULL, current_step INT DEFAULT 1 COMMENT '当前学习阶段', status ENUM('active','completed','paused') DEFAULT 'active', generated_by ENUM('genetic_algorithm','RL') NOT NULL COMMENT '生成算法类型[1](@ref)', version INT DEFAULT 1 COMMENT '路径版本号', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES user(user_id) ); -- 路径历史版本表(支持动态调整追溯) CREATE TABLE learning_path_history ( history_id VARCHAR(36) PRIMARY KEY, path_id VARCHAR(36) NOT NULL, path_structure JSON NOT NULL COMMENT '资源序列与依赖关系', adjustment_reason VARCHAR(500) COMMENT '如"知识点掌握度低于阈值"[6](@ref)', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (path_id) REFERENCES learning_path(path_id) ); CREATE TABLE learning_progress ( progress_id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) NOT NULL, resource_id VARCHAR(36) NOT NULL, completion_rate DECIMAL(5,2) CHECK (completion_rate BETWEEN 0 AND 100), mastery_score DECIMAL(3,2) COMMENT '知识点掌握度(0-1)[6](@ref)', last_accessed TIMESTAMP DEFAULT CURRENT_TIMESTAMP, assessment_result JSON COMMENT '评估指标(如{"正确率":85,"耗时":120s})[8](@ref)', FOREIGN KEY (user_id) REFERENCES user(user_id), FOREIGN KEY (resource_id) REFERENCES learning_resource(resource_id) ); -- 知识点掌握度动态更新表(支持学习分析) CREATE TABLE knowledge_mastery ( user_id VARCHAR(36), knowledge_node VARCHAR(50) COMMENT '知识点唯一标识', p_current DECIMAL(3,2) COMMENT '当前掌握度[6](@ref)', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (user_id, knowledge_node) ); CREATE TABLE subject_relation ( relation_id VARCHAR(36) PRIMARY KEY, source_subject VARCHAR(50) NOT NULL COMMENT '如"计算机科学"', target_subject VARCHAR(50) NOT NULL COMMENT '如"分子生物学"', relation_type ENUM('prerequisite','complementary','parallel') NOT NULL, weight DECIMAL(3,2) COMMENT '关联强度(基于PageRank算法)[3](@ref)' ); CREATE TABLE student_profile ( profile_id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) UNIQUE NOT NULL, learning_style ENUM('visual','auditory','kinesthetic') COMMENT '学习风格[7](@ref)', cognitive_level TINYINT COMMENT '认知复杂度(1-5级)[3](@ref)', error_pattern JSON COMMENT '高频错误模式(FP-Growth挖掘结果)[6](@ref)', FOREIGN KEY (user_id) REFERENCES user(user_id) ); CREATE TABLE report ( report_id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) NOT NULL, metrics JSON COMMENT '如{"学习时长":1200,"知识点覆盖率":78%}', comparison_data JSON COMMENT '同群体对比分位数[7](@ref)', generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES user(user_id) );
时间: 2025-08-11 08:21:24 AIGC 浏览: 30
<think>好的,我需要仔细分析用户提供的数据库表结构,并解释每个表的作用和字段含义。首先,我会逐一查看每个表的CREATE TABLE语句,理解各个字段的用途和它们之间的关系。例如,user表存储用户信息,learning_resource管理学习资源,learning_path记录学习路径等。接下来,我需要确定每个表的主键、外键以及约束条件,确保数据完整性和关联性。比如,user_id在多张表中作为外键,用于关联用户与其他数据。同时,注意特殊字段类型如JSON和ENUM的使用,这些字段存储结构化数据或限定取值范围。
然后,我会考虑每个表的设计是否符合数据库规范化原则,避免数据冗余。例如,learning_path_history存储学习路径的历史版本,通过外键关联到learning_path,这样既保留了历史记录,又不重复存储路径信息。
此外,需要解释一些注释中的引用标记,如[6](@ref),可能指向业务逻辑或算法实现,但用户未提供具体内容,因此我应专注于表结构本身的分析,而不深入这些引用细节。最后,总结整个数据库设计的目标,即支持个性化学习路径推荐、学习进度跟踪和动态调整等功能,满足教育平台的需求。同时,准备相关问题,涉及索引优化、数据查询、扩展性等,以帮助用户进一步理解数据库设计。</think>以下是针对提供的数据库表结构的详细解释:
### 用户表(user)
```sql
CREATE TABLE user (
user_id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键',
username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名(学号/工号)',
password VARCHAR(100) NOT NULL COMMENT '加密存储',
role ENUM('student','teacher','admin') NOT NULL COMMENT '角色类型',
interest_tags JSON COMMENT '兴趣标签(如["编程","生物"])',
ability_level JSON COMMENT '能力维度评分(如{"数学":85,"逻辑":78})',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
**作用**:存储系统用户的核心信息
- `user_id`:使用UUID保证全局唯一性
- `interest_tags`:JSON格式存储用户兴趣标签
- `ability_level`:JSON对象记录多维能力评分
- `role`:枚举类型确保角色取值规范
### 学习资源表(learning_resource)
```sql
CREATE TABLE learning_resource (
resource_id VARCHAR(36) PRIMARY KEY,
title VARCHAR(200) NOT NULL,
type ENUM('video','document','quiz','project') NOT NULL,
difficulty TINYINT CHECK (difficulty BETWEEN 1 AND 5),
subject_id VARCHAR(36) NOT NULL,
prerequisite JSON COMMENT '前置知识点',
related_subjects JSON COMMENT '跨学科关联',
duration INT COMMENT '预估学习时长(分钟)',
FOREIGN KEY (subject_id) REFERENCES subject(subject_id)
);
```
**特点**:
- 使用CHECK约束保证难度值在1-5之间
- JSON字段存储知识点和学科关系
- 外键关联学科体系表(未展示)
### 学习路径表(learning_path)
```sql
CREATE TABLE learning_path (
path_id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
current_step INT DEFAULT 1 COMMENT '当前学习阶段',
status ENUM('active','completed','paused') DEFAULT 'active',
generated_by ENUM('genetic_algorithm','RL') NOT NULL,
version INT DEFAULT 1 COMMENT '路径版本号',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(user_id)
);
```
**业务逻辑**:
- `generated_by`记录路径生成算法类型
- `version`支持路径更新迭代
- `current_step`跟踪用户当前学习进度
### 知识点掌握度表(knowledge_mastery)
```sql
CREATE TABLE knowledge_mastery (
user_id VARCHAR(36),
knowledge_node VARCHAR(50) COMMENT '知识点唯一标识',
p_current DECIMAL(3,2) COMMENT '当前掌握度',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id, knowledge_node)
);
```
**设计亮点**:
- 复合主键确保每个用户每个知识点唯一记录
- `p_current`使用小数表示掌握百分比
- 时间戳自动记录更新时间
### 性能优化设计
1. **索引策略**:
- 所有主键自动创建聚集索引
- 外键字段自动创建非聚集索引
- 高频查询字段(如user表的username)添加唯一索引
2. **JSON字段使用**:
```sql
-- 查询兴趣标签包含"编程"的用户
SELECT * FROM user
WHERE JSON_CONTAINS(interest_tags, '"编程"', '$')
-- 更新能力维度中的数学分数
UPDATE user SET ability_level = JSON_SET(ability_level, '$.数学', 90)
WHERE user_id = 'xxx'
```
3. **分区策略建议**:
```sql
ALTER TABLE learning_progress
PARTITION BY RANGE (YEAR(last_accessed)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025)
);
```
阅读全文