一,实体分析描述
基于DeepSeek的代码评测和自动纠错优化系统-数据库架构的初步设计和流程
基于DeepSeek的代码评测和自动纠错优化系统-需求分析与关系图
概念结构设计清单
用户信息实体:用户账号,密码,邮箱,注册时间
题目信息实体:题目编号,题目内容,题目描述,样例输入,样例输出,题目难度,通过的测试用例,未通过的用例,总用例
评测信息实体:用户账号,提交代码,提交代码语言,代码通过测试数,代码运行时间,题目编号
用户必须注册并登录系统才能进行代码评测
每次提交一道题
评测系统管理
submission {提交ID,题目ID,代码,使用语言,提交时间,通过数量,总提交,结果}
analysis_result{提交ID,推理过程文本,分析结果,代码量化}
testcaseresult{提交ID, 测试点ID,提交量化信息,用户输入输出}
二,数据库逻辑结构设计
user
作为用户信息的保存,用于用户注册登录和鉴权
去向:Register检测用户注册注册名是否重复,Login校验密码,生成 JWT token
定义用户身份信息表,储存密码以及邮箱账户
package models
import "gorm.io/gorm"
type User struct {
gorm.Model
Username string `json:"username" gorm:"unique"`
Password string `json:"password"` // 注意:后续我们将加密存储
Email string `json:"email"`
}
problem
对题目信息的保存,题目的简要描述,输出数据流为题目介绍,支持题目增删改查(Problem内部调用)
来源:手动添加并更新题目进入数据库(需要认证)
去向:允许Problem调用题目,查询所有问题提交记录
定义题目相关内容表,包括题目要求,输入和输出,输入输出样例和难度评级
package models
import "gorm.io/gorm"
type Problem struct {
gorm.Model
//ID uint `json:"id"`
Title string `json:"title"`
Description string `json:"description"` // 题目描述
Input string `json:"input"` // 输入描述
Output string `json:"output"` // 输出描述
SampleInput string `json:"sample_input"`
SampleOutput string `json:"sample_output"`
Difficulty string `json:"difficulty"` // easy / medium / hard
}
if err := utils.DB.Model(&models.Submission{}).
Where("problem_id = ?", problemID).
Count(&total).
Order("submit_time desc").
Offset((pageInt - 1) * limitInt).
Limit(limitInt).
Find(&submissions).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
submission
管理用户提交信息,评测系统的核心表
来源:从problem获得题目ID,创建提交记录
去向:向用户提交评测结果,向submission保留提交记录
定义用户提交表,包括提交ID信息,题目ID,提交的代码内容,评测系统判定结果,总数和通过数量,执行时间等与用户方提交有关的信息
package models
import (
"time"
"gorm.io/gorm"
)
type Submission struct {
gorm.Model
UserID uint `json:"user_id"`
ProblemID uint `json:"problem_id"`
Code string `json:"code"`
Language string `json:"language"`
Result string `json:"result"` // 总体结果
SubmitTime time.Time `json:"submit_time"`
PassedCount int `json:"passed_count"` // 通过数量
TotalCount int `json:"total_count"` // 总数量
}
sub := models.Submission{
UserID: userID,
ProblemID: uint(problemID),
Code: req.Code,
Language: req.Language,
Result: "Pending",
SubmitTime: time.Now(),
}
utils.DB.Create(&sub)
analysis_result
评测系统中的分析记录部分,具体到代码的性能分析和量化
来源:提交的submission表的子表
去向:保留分析结果到数据库,并允许查询在同一提交ID下的所有分析结果
_ = services.SaveAnalysisResult(analysis.ID, result)
c.JSON(http.StatusOK, gin.H{
"submission_id": sid,
"analyses": analyses,
})
定义用户提交分析表,包括提交ID记录,推理过程文本,分析结果内容,代码量化指标,用于存储用户代码评测数据,保存量化结果
package models
import "gorm.io/gorm"
type AnalysisResult struct {
gorm.Model
SubmissionID uint `json:"submission_id"`
ReasoningContent string `gorm:"type:text" json:"reasoning_content"`
Content string `gorm:"type:text" json:"content"`
Status string `gorm:"type:varchar(50)" json:"status"`
}
testcaseresult
定义测试样例表,提交ID,测试点ID,提交量化信息,增加预期输出的存储实现代码纠错
package models
import "gorm.io/gorm"
type TestcaseResult struct {
gorm.Model
SubmissionID uint `json:"submission_id"` // 所属提交
CaseID string `json:"case_id"` // 测试点编号,如 "1", "2"
Status string `json:"status"` // Accepted / Wrong Answer / Runtime Error
Output string `json:"output"` // 用户输出
Expected string `json:"expected"` // 预期输出
RuntimeMs int `json:"runtime_ms"` // 执行时间(毫秒)
}