当前位置: 首页 > news >正文

OJ在线评测系统 后端开发数据库初始化工作 开发库表 建立数据库索引 Mybatis映射初始化接口开发

后端接口开发库表设计

项目主业务流程的开发

1.用户模块

注册(后端已实现)

登录(后端已实现 前端已实现)

2.题目模块

创建题目(管理员)

删除题目(管理员)

修改题目(管理员)

搜索题目(用户)

在线做题(题目详细页)

3.判题模块

提交判题(结果是否正确与错误)

错误处理(内存溢出 安全性 超时)

自主实现 代码沙箱(安全沙箱)

开放接口(提供一个独立的新服务)

创建索引

题目表

题目标题

题目内容 存放题目的介绍 输入输出提示 描述 具体的情况

题目标签(json数组字符串) 栈 队列 链表 简单 中等 困难

题目答案 管理员或者是用户设置的标准答案

提交数 通过题目的人数 便于分析统计

如果说题目不是很复杂 用例文件不大的话 可以直接存在数据库表里面

但是如果用例文件比较大 大于512kb的话

建议单独存放在一个文件中 数据库中只保存文件url

输入用例 1,2

输出用例3 4

时间限制

内存限制

我们这边选择的是一个judegConfig判题配置(json对象)

时间限制

内存限制

judgeCase判题用例(json数组)

每一个元素是 一个输入用例对应一个输出用例

数组中每一个元素 一个输入用例对应一个输出用例

json对象便于扩展

只需要改变对象内部的字段

而不用修改数据库表 可能会影响数据库

{"timeLimit":1000,"stackLimit":1000
}
[{"input":"1 2","output":"3 4"},{"input":"1 3","output":"2 4"}
]

存json的前提

你不需要根据某个字段去倒查某条数据

你的字段含义相关 属于同一类的数值

你的字段存储空间占比不能太大

    judgeCase text null comment '判题用例(json数组)',judgeConfig text null comment '判题配置(json数组)',

全部代码

-- 帖子表
create table if not exists question
(id          bigint auto_increment comment 'id' primary key,title       varchar(512)                       null comment '标题',content     text                               null comment '内容',tags        varchar(1024)                      null comment '标签列表(json 数组)',answer      text                               null comment '题目答案',submitNum   int      default 0                 not null comment '题目提交数',acceptedNum int      default 0                 not null comment '题目通过数',judgeCase text null comment '判题用例(json数组)',judgeConfig text null comment '判题配置(json数组)',thumbNum    int      default 0                 not null comment '点赞数',favourNum   int      default 0                 not null comment '收藏数',userId      bigint                             not null comment '创建用户 id',createTime  datetime default CURRENT_TIMESTAMP not null comment '创建时间',updateTime  datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',isDelete    tinyint  default 0                 not null comment '是否删除',index idx_userId (userId)
) comment '题目' collate = utf8mb4_unicode_ci;

题目提交表

提交用户id: userId

题目id: questionId

语言: language

用户的代码: code

判题状态: status (待判题 判题中 成功 失败)

判题信息 判题过程中得到的一些信息 比如说程序失败的原因 程序执行消耗的时间 空间

judgeInfo(json对象)

{"message": "程序执行信息","time": 1000,"memory": 1000,
}

判题信息枚举值

Accepted

Wrong Answer

Compile Error

Memory Limit Exceeded

Time Limit Exceeded

Presentation Error

Output Limit Exceeded

Waiting

Dangerous Operation

Runtime error

System error

-- 题目提交表(硬删除)
create table if not exists question_submit
(id         bigint auto_increment comment 'id' primary key,language   varchar(128)                       not null comment '编程语言',code       text                               not null comment '用户代码',judgeInfo  text                               not null comment '判题信息(json对象)',status     int      default 0 comment '判题状态 0判题中 1成功 2成功 3失败',questionId bigint                             not null comment '题目id',userId     bigint                             not null comment '创建用户 id',createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',index idx_questionId (questionId),index idx_userId (userId)
) comment '题目提交表';

后端开发数据库索引

我们建立索引

最先考虑的是我们最多情况下是根据什么来查询表

就是放在where条件里面的东西

 

索引尽量加到区分度多的地方

什么情况下适合加索引呢

如何选择给哪个字段加索引?

答:首先从业务出发 无论是单个索引 还是联合索引

都要从实际查询的语句 字段枚举值的区分度 类型考虑(where指定的字段)

比如说where userId =1 and questionId=2

可以选择根据 userId 和 questionId 分部建立索引 也可以选择给这两个字段建立联合索引

如果这两个字段出现在一起 那么建立联合索引

原则上能不用索引就不用索引

能用单个索引就用单个索引

索引也要占用空间

类似于叫做目录

后端接口的开发 初步

第一步根据功能设计库表

第二步自动生成对数据库基本的增删改查(mapper和service层的基本功能)

第三步编写Controller层 实现基本增删改查和权限校验

第四步根据业务定制开发新的功能和代码

我们要安装一个mybatis x的插件

右键选择表

选择

这样就能一键生成

我们在把question_submit表生成一下

先搬到实体类里面

全部搬进后端模版


http://www.mrgr.cn/news/33657.html

相关文章:

  • CDA LEVEL 2考试大纲
  • 显示微服务间feign调用的日志
  • 第4章: 图像绘制与文本添加
  • Java 实现自定义 LRU 缓存
  • 翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
  • xtu oj 聚会
  • golang学习笔记2-语法要求,注释与代码风格
  • pycharm加载虚拟环境及运行代码
  • 【VUE3.0】动手做一套像素风的前端UI组件库---Radio
  • 模拟电路工程师面试题
  • Android——Application
  • awd初试
  • 车辆重识别(CVPR2016图像识别的深度残差学习ResNet)论文阅读2024/9/21
  • python异常处理知识简记
  • 1542. 找出最长的超赞子字符串
  • Snap 发布新一代 AR 眼镜,有什么特别之处?
  • PCB设计中百兆以太网是否需要差分布线?
  • 皮科医生对网红药膏的说明
  • 7. 无线网络安全
  • 【.NET 8 实战--孢子记账--从单体到微服务】--特别说明
  • 以太坊客户端Geth的介绍与搭建
  • 基于SpringBoot+Vue+MySQL的校园一卡通系统
  • ECharts基础使用方法 ---vue
  • 都市女生热衷找搭子的原因?只因对生活的热爱和追求
  • vscod django项目--编辑用户信息
  • js进阶——什么是提升