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

news2024/9/22 20:08:19

后端接口开发库表设计

项目主业务流程的开发

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.coloradmin.cn/o/2155812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+MySQL的校园一卡通系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着现代社会的快速发展,校园一卡通已成为大学生活中不可或缺的一部分。它不仅承载着校园消费的功能,还集成了学生身份证明、图书馆借阅、门禁系统等多种服务。然而,传统的一卡通管理系统往往…

阿里HPN-用于大型语言模型训练的数据中心网络

阿里巴巴HPN:用于大型语言模型训练的数据中心网络 探索大规模语言模型训练新方法:阿里巴巴HPN数据中心网络论文。 摘要 本文介绍了阿里云用于大型语言模型(LLM)训练的数据中心网络HPN。由于LLM和一般云计算之间的差异(例如,在流量模式和容错性方面)&…

【机器学习】12-决策树1——概念、特征选择

机器学习10-决策树1 学习样本的特征,将样本划分到不同的类别(分类问题)或预测连续的数值(回归问题)。 选择特征,划分数据集,划分完成形成模型(树结构),一个…

新手必看:一步步教你绑定常见邮箱到第三方应用(如何绑定QQ、163、Hotmail、Gmail等邮箱)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 邮箱绑定 📒📫 QQ邮箱📫 163邮箱📫 Hotmail邮箱📫 Gmail邮箱📫 Yahoo邮箱📫 iCloud邮箱📫 其他邮箱⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经为绑定第三方邮箱而感到困惑?你不是一个人!许多人在尝试将QQ邮…

QT创建菜单

增加显示信息

MySQL数据库的增删改查以及基本操作分享

1、登录MySQL数据库 首先找到你安装MySQL数据库的目录,然后在终端打开该目录,输入以下命令 mysql -u root -p然后输入密码就可以登录数据库了,看到如下页面就是登陆成功了 ***注意在终端操纵数据库时所有语句写完之后一定要加 &#xff1…

【线程】线程的同步

本文重点:理解条件变量和生产者消费者模型 同步是在保证数据安全的情况下,让我们的线程访问资源具有一定的顺序性 条件变量cond 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了,…

CSS 选择器的分类与使用要点一

目录 非 VIP 用户可前往公众号进行免费阅读 标签选择器 id 选择器 类选择器 介绍 公共类 CSS 中优先用 class 选择器,慎用 id 选择器 后代选择器 交集选择器 以标签名作为开头 以类名作为开头 连续交集 并集选择器(分组选择器) 通配符* 儿子选择器 >(IE7…

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术?1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…

基于单片机的智能温控风扇系统的设计

[摘 要] 设计一种基于单片机的智能温控风扇系统,系统由 STC 系列的 51 单片机 、 温度传感器 、 LED 数码管和风扇等模块组成。 本系统具有对外界温度感知以及对感知数据进行分析处理 、 智能调节等功能,避免因温度过高而产生…

【全部更新】2024华为杯数学建模研赛F题思路代码文章全国研究生数学建模-X射线脉冲星光子到达时间建模

截止9.22 14:00 已更新全部文章内容完整求解代码(正版授权) ### https://docs.qq.com/doc/DVVBUREF2SmFhRUl3X射线脉冲星光子到达时间建模 摘要 脉冲星是一类高速自转的中子星,其自转形成规律性脉冲信号,类似于“宇宙中的灯塔”,因此被认为是…

鸿蒙 WebView 如何 Debug

前置: hdc chrome //----------------------------------------------------------------------------------------------- hdc shell cat /proc/net/unix | grep devtools 0: 00000002 0 10000 1 1 81134005 webview_devtools_remote_62479exit执行&…

[001-02-001].第2节:java开发环境搭建

4.1.书籍推荐: 4.2.人机交互方式 1.图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作2.命令行方式(Command Line Interface CLI):需要有一个控制台,输入特定的指令&#xff0c…

828华为云征文|云服务器Flexus X实例|MacOS系统-宝塔部署Nuxt项目

文章目录 1. Flexus云服务器X实例1.1 与Flexus应用服务器L实例相比具备以下优势1.2 服务器的详细配置 2.宝塔部署Nuxt项目2.1 登录实例2.1 宝塔面板 3. Nuxt 项目与部署3.1 Nuxt3.2创建Nuxt项目3.3 部署3.4 部署成功 4.结语 1. Flexus云服务器X实例 华为云的Flexus云服务是为中…

股指期权交易详细基础介绍

股指期权是期权市场中的一种特定类型,其标的资产为股票指数。简而言之,它允许投资者在未来某个特定时间,以预先约定的价格,买入或卖出股票指数的权利。在中国,已上市的股指期权包括上证50、沪深300和中证1000股指期权&…

【C++ Primer Plus习题】17.5

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <fstream> #include <…

数据库系统基础概述

文章目录 前言一、数据库基础概念 1.数据库系统的组成2.数据模型3.数据库的体系结构二、MySQL数据库 1.了解MySQL2.MySQL的特性3.MySQL的应用场景总结 前言 MySQL数据库是一款完全免费的产品&#xff0c;用户可以直接从网上下载使用&#xff0c;不用花费任何费用。这点对于初学…

react开发环境搭建

文章目录 准备工作创建 React 项目使用 create-react-app 创建 React 项目使用 Vite 创建 React 项目启动项目效果安装出现的情况 react项目文件讲解1. 项目根目录2. 其他可能的目录和文件3. 配置文件 准备工作 Node.js 安装方法&#xff1a; 方式一&#xff1a;使用 NVM 安装…

制作一个rabbitmq-sdk以及rabbitmq消费者实现定时上下线功能

目录结构 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">&l…

力扣中等 33.搜索旋转排序数组

文章目录 题目介绍题解 题目介绍 题解 首先用 153. 寻找旋转排序数组中的最小值 的方法&#xff0c;找到 nums 的最小值的下标 i。 然后分类讨论&#xff1a; 如果 target>nums[n−1]&#xff0c;在 [0,i−1] 中二分查找 target。 如果 target≤nums[n−1]&#xff0c;那…