51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个存储学生编程作品(如代码文件、运行结果、评分)的数据库表结构。请说明表结构、字段设计、索引优化及数据安全措施。

学而思素养教师:科学思维、人文创作、国际素养 (外语方向)、编程难度:中等

答案

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,旧版本保留,便于回溯。
  • 问:大文件(如视频运行结果)如何存储?答:采用对象存储(如阿里云OSS),存储视频文件,通过URL访问,避免数据库内二进制存储带来的性能问题。
  • 问:如何优化按作品类型筛选的查询?答:对作品表的type字段建索引,加速按编程语言类型(如Python、Java)筛选作品。
  • 问:文件类型验证如何实现?答:上传前检查文件扩展名(如仅允许.py、.java),并验证文件内容(如Python文件包含特定语法结构),防止恶意文件上传。
  • 问:数据加密的具体实现?答:对评分表中的score字段使用AES加密,密钥存储在安全密钥管理服务中,确保敏感信息安全。

7) 【常见坑/雷区】:

  • 未明确数据库类型:未说明使用MySQL等关系型数据库,导致严谨性不足。
  • 文件路径直接存储:未考虑文件移动导致路径失效,应采用对象存储或版本控制。
  • 索引选择不当:对不常查询的字段(如create_time)建索引,导致存储空间浪费和更新慢,应聚焦高频查询字段。
  • 版本管理缺失:未设计版本字段和关联,无法追踪作品历史版本。
  • 安全措施不足:未对敏感字段(如评分)加密,或权限控制不严格(如教师可查看所有作品),导致数据泄露风险。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1