
1) 【一句话结论】:采用关系型数据库设计多表关联结构,通过主键外键建立课程模块、教师、学生与资源文件的关联,并利用索引、分区及对象存储优化资源检索与存储性能。
2) 【原理/概念讲解】:关系型数据库以表存储数据,主键唯一标识表内记录(如课程ID唯一标识课程模块),外键关联不同表(如资源文件表通过课程ID关联课程模块表,确保资源属于特定课程)。类比:课程模块表是“课程目录”,资源文件表是“课程内容”,课程ID像目录页码,连接目录与内容。外键约束保证数据一致性,索引加速常用检索(如按课程ID查资源),分区处理大数据(如按课程ID或时间分区,提升查询效率)。对象存储用于大文件(视频、代码),资源表仅存路径和元数据,减少数据库压力。
3) 【对比与适用场景】:
| 设计点 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 课程模块表 | 存储课程模块基本信息 | 主键:课程ID(INT, PRIMARY KEY),唯一标识课程 | 课程规划与管理 | 避免课程ID重复 |
| 教师表 | 教师基本信息 | 主键:教师ID(INT, PRIMARY KEY),唯一标识教师 | 教师信息管理 | 教师ID唯一 |
| 学生表 | 学生基本信息 | 主键:学生ID(INT, PRIMARY KEY),外键:班级ID(INT, FOREIGN KEY REFERENCES 班级表(班级ID)) | 学生信息管理 | 班级关联,需班级表支持外键 |
| 班级表 | 班级信息 | 主键:班级ID(INT, PRIMARY KEY),班级名称(VARCHAR) | 班级管理 | 班级ID唯一 |
| 资源文件表 | 资源文件信息 | 主键:资源ID(INT, PRIMARY KEY),外键:课程ID(INT, FOREIGN KEY),教师ID(INT, FOREIGN KEY),资源类型(VARCHAR),文件路径(TEXT,存储对象存储路径),上传时间(DATETIME) | 资源文件管理 | 大文件存储在对象存储,路径需完整;资源类型枚举 |
| 资源使用记录表(可选) | 学生使用资源记录 | 主键:记录ID(INT, PRIMARY KEY),外键:学生ID(INT, FOREIGN KEY),资源ID(INT, FOREIGN KEY),使用时间(DATETIME) | 资源使用分析 | 支持统计学生使用情况 |
4) 【示例】SQL伪代码:
-- 班级表
CREATE TABLE 班级 (
班级ID INT PRIMARY KEY,
班级名称 VARCHAR(50) NOT NULL
);
-- 学生表
CREATE TABLE 学生 (
学生ID INT PRIMARY KEY,
姓名 VARCHAR(50) NOT NULL,
班级ID INT,
入学年份 YEAR,
FOREIGN KEY (班级ID) REFERENCES 班级表(班级ID)
);
-- 课程模块表
CREATE TABLE 课程模块 (
课程ID INT PRIMARY KEY,
课程名称 VARCHAR(100) NOT NULL,
模块描述 TEXT,
创建时间 DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 教师表
CREATE TABLE 教师 (
教师ID INT PRIMARY KEY,
姓名 VARCHAR(50) NOT NULL,
专业 VARCHAR(50),
联系方式 VARCHAR(100)
);
-- 资源文件表
CREATE TABLE 资源文件 (
资源ID INT PRIMARY KEY,
资源名称 VARCHAR(100) NOT NULL,
文件路径 TEXT NOT NULL, -- 存储对象存储路径,如 "oss://bucket/resource/课件1.pptx"
课程ID INT,
教师ID INT,
资源类型 VARCHAR(20) CHECK (资源类型 IN ('课件', '视频', '代码示例')),
上传时间 DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (课程ID) REFERENCES 课程模块(课程ID),
FOREIGN KEY (教师ID) REFERENCES 教师(教师ID)
);
-- 资源使用记录表(可选)
CREATE TABLE 资源使用记录 (
记录ID INT PRIMARY KEY,
学生ID INT,
资源ID INT,
使用时间 DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (学生ID) REFERENCES 学生(学生ID),
FOREIGN KEY (资源ID) REFERENCES 资源文件(资源ID)
);
5) 【面试口播版答案】:面试官您好,我设计的数据库通过多表关联实现课程资源管理。首先,核心表包括课程模块表(主键课程ID)、教师表(主键教师ID)、学生表(主键学生ID)、班级表(主键班级ID)和资源文件表(主键资源ID)。学生表通过班级ID关联班级表,确保学生属于特定班级;资源文件表通过课程ID和教师ID关联课程模块表和教师表,保证资源属于特定课程和教师。资源文件的大文件(如视频、代码示例)存储在对象存储(如阿里云OSS),资源表仅存储对象存储的路径和元数据,减少数据库压力。查询优化方面,对课程ID、资源类型等常用检索字段创建复合索引(如资源文件表的(课程ID, 资源类型)复合索引),加速按课程或资源类型检索资源;对课程模块表按课程ID分区,资源文件表按上传时间分区,利用分区技术提升大数据量查询效率。这样设计既保证数据关联的完整性,又优化了资源检索和存储性能。
6) 【追问清单】:
7) 【常见坑/雷区】: