
1) 【一句话结论】:设计包含学生、作品(含版本管理)、文件(对象存储URL)、运行结果、评分的关联表,通过外键关联确保数据一致性,结合对象存储处理大文件,按高频查询模式优化索引,并实施权限控制与数据加密,实现作品全生命周期管理。
2) 【原理/概念讲解】:首先明确数据库选择(假设使用MySQL,关系型数据库,适合事务与关联查询)。表设计遵循第三范式,减少冗余。核心表通过主键(如work_id)和外键(如student_id、file_id)关联,确保数据完整性。索引用于加速高频查询(如按学生ID、作品类型筛选),提升查询性能。数据安全包括:权限控制(角色权限,如教师仅评自己作品)、数据加密(敏感字段如评分加密)、对象存储访问控制(防止未授权访问)。
类比:学生作品表是作品目录,文件表是代码仓库(通过对象存储URL访问),运行结果表是执行日志,评分表是评价记录,三者通过作品ID关联,就像作品集里的每一件作品都有对应的仓库位置、日志和评价;版本管理则记录不同版本的文件,类似文档的修订历史。
3) 【对比与适用场景】:
| 存储方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 文件路径(本地存储) | 存储文件在文件系统的绝对路径 | 简单,存储成本低 | 小文件(如代码文件<10MB),文件系统稳定 | 文件移动导致路径失效,访问权限依赖文件系统 |
| 对象存储(如阿里云OSS) | 存储文件为对象,通过URL访问 | 弹性扩展,高可用,访问控制 | 大文件(如视频运行结果>100MB),高访问频率 | 需要网络访问,成本随存储量增加 |
| 二进制存储(数据库内存储) | 文件内容以二进制形式存储在数据库表字段 | 数据完整,不依赖文件系统 | 极大文件(如大型项目包),文件系统不稳定 | 存储成本高,查询慢,不适合频繁修改 |
4) 【示例】:
-- 学生表
CREATE TABLE student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
class VARCHAR(50)
);
-- 作品表(含版本管理)
CREATE TABLE work (
work_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
title VARCHAR(100),
type VARCHAR(20), -- 如Python, Java
create_time DATETIME,
version INT DEFAULT 1 -- 记录版本号
);
-- 文件表(关联作品版本,存储对象存储URL)
CREATE TABLE file (
file_id INT PRIMARY KEY AUTO_INCREMENT,
work_id INT,
file_version INT, -- 外键关联work.version
file_url VARCHAR(255), -- 对象存储的URL
file_type VARCHAR(10), -- 如.py, .txt
upload_time DATETIME
);
-- 运行结果表
CREATE TABLE result (
result_id INT PRIMARY KEY AUTO_INCREMENT,
work_id INT,
output_content TEXT,
run_time DATETIME
);
-- 评分表
CREATE TABLE score (
score_id INT PRIMARY KEY AUTO_INCREMENT,
work_id INT,
score INT,
comment TEXT,
reviewer_id INT, -- 外键关联教师表
review_time DATETIME
);
-- 角色权限表
CREATE TABLE role_permission (
role VARCHAR(20),
permission VARCHAR(50)
);
-- 用户角色表
CREATE TABLE user_role (
user_id INT,
role VARCHAR(20) -- 外键关联角色表
);
5) 【面试口播版答案】:面试官您好,针对存储学生编程作品,我设计包含学生、作品(含版本管理)、文件(对象存储URL)、运行结果、评分的关联表。首先,学生表存储基本信息,作品表关联学生,记录作品标题、类型和版本号;文件表通过对象存储URL存储代码文件,并关联作品版本,运行结果表存执行输出;评分表记录评分和评语。通过外键关联确保数据一致性,比如作品ID作为主键,学生ID、文件ID等作为外键。索引优化:对student_id、work_id、reviewer_id等常用查询字段建索引,加速按学生、作品类型、评分者查询;对评分表按work_id和reviewer_id建复合索引,优化评分查询。数据安全方面,对评分字段加密存储,教师角色仅能访问自己评分的作品,学生只能查看自己的作品,权限控制通过角色和权限表实现,对象存储的访问权限仅限内部系统。这样设计既保证数据完整,又提升查询效率,同时保障数据安全。
6) 【追问清单】:
version字段自增,文件表新增记录,关联新版本文件URL,旧版本保留,便于回溯。type字段建索引,加速按编程语言类型(如Python、Java)筛选作品。score字段使用AES加密,密钥存储在安全密钥管理服务中,确保敏感信息安全。7) 【常见坑/雷区】:
create_time)建索引,导致存储空间浪费和更新慢,应聚焦高频查询字段。