news 2026/4/16 1:16:58

CodeQ 项目数据库设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CodeQ 项目数据库设计

CodeQ 项目数据库设计

一、项目背景

CodeQ 是一个代码大模型训练语料质量评估平台,旨在通过指标提取与大模型分析相结合的方式,为用户提供可解释、可对比的代码质量报告。平台支持多仓库对比、质量趋势追踪,是大模型时代下代码质量管理的重要工具。

本文将详细介绍 CodeQ 平台的数据库设计方案,包括表结构设计、字段说明、关系映射以及设计思路。

二、数据库设计概述

2.1 数据库选型

  • 数据库系统:MySQL 8.0
  • 字符集:utf8mb4,支持完整的 Unicode 字符(包括 emoji)
  • 排序规则:utf8mb4_unicode_ci,支持多语言排序

2.2 数据库名称

codeq_db

2.3 设计原则

  1. 模块化设计:按业务功能划分数据表,降低耦合度
  2. 可扩展性:预留 JSON 扩展字段,支持指标动态扩展
  3. 可追溯性:记录操作日志,便于审计和调试
  4. 规范化:遵循数据库三范式,减少数据冗余

三、核心表结构设计

3.1 用户表(user)

用户表是平台的基础,存储所有注册用户的信息。

CREATETABLEuser(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'用户唯一ID',usernameVARCHAR(50)NOTNULLUNIQUECOMMENT'用户名(唯一)',passwordVARCHAR(100)NOTNULLCOMMENT'加密后的用户密码',emailVARCHAR(100)COMMENT'用户邮箱',roleVARCHAR(20)DEFAULT'user'COMMENT'用户角色:user / admin',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'用户创建时间')COMMENT='用户信息表';

设计要点

  • id使用 BIGINT 类型,支持大规模用户
  • username唯一索引,保证用户名不重复
  • password存储加密后的密码,不存储明文
  • role支持权限分级,默认为普通用户

3.2 仓库信息表(repository)

记录用户提交的代码仓库信息。

CREATETABLErepository(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'仓库ID',user_idBIGINTNOTNULLCOMMENT'所属用户ID',repo_nameVARCHAR(200)COMMENT'仓库名称',repo_urlVARCHAR(300)NOTNULLCOMMENT'仓库URL地址',languageVARCHAR(50)COMMENT'主要编程语言',fork_countINTDEFAULT0COMMENT'Fork 数量',star_countINTDEFAULT0COMMENT'Star 数量',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'仓库记录创建时间',FOREIGNKEY(user_id)REFERENCESuser(id))COMMENT='代码仓库信息表';

设计要点

  • 外键关联user_id,建立用户与仓库的归属关系
  • 存储fork_countstar_count,便于评估仓库影响力
  • language字段用于标识主要编程语言,支持多语言筛选

3.3 分析任务表(analysis_task)

核心表之一,记录每一次代码分析任务的执行情况。

CREATETABLEanalysis_task(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'分析任务ID',repo_idBIGINTNOTNULLCOMMENT'关联的仓库ID',commit_hashVARCHAR(100)COMMENT'分析对应的提交版本',statusVARCHAR(20)COMMENT'任务状态:PENDING / RUNNING / SUCCESS / FAILED',total_filesINTCOMMENT'分析的文件总数',total_linesINTCOMMENT'分析的总代码行数',start_timeDATETIMECOMMENT'任务开始时间',end_timeDATETIMECOMMENT'任务结束时间',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'任务创建时间',FOREIGNKEY(repo_id)REFERENCESrepository(id))COMMENT='代码分析任务表';

设计要点

  • status字段追踪任务生命周期(待处理→执行中→成功→失败)
  • commit_hash记录具体分析的代码版本,支持版本追溯
  • 时间字段记录任务耗时,便于性能监控

3.4 仓库级质量指标结果表(metric_result)

存储仓库级别的汇总质量指标,是质量评估的核心数据来源。

CREATETABLEmetric_result(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'指标结果ID',task_idBIGINTNOTNULLCOMMENT'关联的分析任务ID',-- 基础统计指标code_linesINTCOMMENT'有效代码行数',comment_linesINTCOMMENT'注释行数',blank_linesINTCOMMENT'空行数',comment_densityDOUBLECOMMENT'注释密度(注释行 / 总行数)',-- 复杂度指标avg_cyclomatic_complexityDOUBLECOMMENT'平均圈复杂度',high_complexity_func_countINTCOMMENT'高复杂度函数数量',-- 可维护性指标duplication_rateDOUBLECOMMENT'代码重复率',naming_violation_countINTCOMMENT'命名规范违规数量',-- 健壮性指标static_warning_countINTCOMMENT'静态分析警告数量',-- 综合评分quality_scoreDOUBLECOMMENT'综合质量评分(0~100)',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'指标生成时间',FOREIGNKEY(task_id)REFERENCESanalysis_task(id))COMMENT='仓库级代码质量指标表';

设计要点

  • 指标维度覆盖:基础统计、复杂度、可维护性、健壮性四大类
  • quality_score是综合评分的归一化结果,便于直观比较
  • 总计实现10+ 项核心指标,满足任务书要求(≥8项)

3.5 文件级指标表(file_metric)

细粒度到文件级别的指标,用于定位具体问题文件。

CREATETABLEfile_metric(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'文件指标ID',task_idBIGINTNOTNULLCOMMENT'关联的分析任务ID',file_pathVARCHAR(500)COMMENT'文件相对路径',code_linesINTCOMMENT'文件代码行数',comment_densityDOUBLECOMMENT'文件注释密度',cyclomatic_complexityDOUBLECOMMENT'文件平均圈复杂度',warning_countINTCOMMENT'静态分析警告数',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'记录生成时间',FOREIGNKEY(task_id)REFERENCESanalysis_task(id))COMMENT='文件级代码质量指标表';

设计要点

  • 支持问题定位到具体文件
  • file_path存储相对路径,便于跨平台处理
  • 为前端提供文件级别的热力图数据

3.6 质量分析报告表(quality_report)

存储大模型生成的自然语言报告。

CREATETABLEquality_report(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'报告ID',task_idBIGINTNOTNULLCOMMENT'关联的分析任务ID',model_nameVARCHAR(50)COMMENT'使用的大模型名称',summaryTEXTCOMMENT'整体质量总结',advantagesTEXTCOMMENT'代码优点分析',problemsTEXTCOMMENT'主要问题说明',suggestionsTEXTCOMMENT'改进建议',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'报告生成时间',FOREIGNKEY(task_id)REFERENCESanalysis_task(id))COMMENT='代码质量分析报告表';

设计要点

  • 使用 TEXT 类型存储长文本报告
  • 结构化存储:总结、优点、问题、建议四部分
  • model_name记录使用的大模型,便于 A/B 测试

3.7 指标明细 JSON 表(metric_detail_json)

扩展指标存储表,使用 JSON 格式灵活存储额外指标。

CREATETABLEmetric_detail_json(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'JSON指标ID',task_idBIGINTNOTNULLCOMMENT'关联的分析任务ID',metric_json JSONCOMMENT'指标明细(JSON 格式)',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'记录时间',FOREIGNKEY(task_id)REFERENCESanalysis_task(id))COMMENT='扩展指标JSON表';

设计要点

  • 使用 MySQL 8.0 的 JSON 原生类型
  • 支持动态扩展指标,无需修改表结构
  • 示例 JSON 结构:
{"function_length":{"avg":15.3,"max":45},"depth":{"max_nesting":5},"unused_variables":3,"potential_bugs":2}

3.8 用户操作日志表(operation_log)

记录关键操作,用于审计和调试。

CREATETABLEoperation_log(idBIGINTPRIMARYKEYAUTO_INCREMENTCOMMENT'日志ID',user_idBIGINTCOMMENT'操作用户ID',actionVARCHAR(100)COMMENT'操作类型',detailVARCHAR(500)COMMENT'操作详情',created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT'操作时间')COMMENT='用户操作日志表';

四、ER图

五、设计亮点总结

5.1 指标维度完整

设计实现了任务书要求的全部指标类别:

指标类别具体指标数量
基础统计代码行数、注释行数、空行数、注释密度4
复杂度平均圈复杂度、高复杂度函数数2
可维护性代码重复率、命名规范违规数2
健壮性静态分析警告数1
综合评分质量评分1
合计10

5.2 支持多粒度分析

  • 仓库级:metric_result 表提供整体质量评分
  • 文件级:file_metric 表定位具体问题文件
  • 扩展级:metric_detail_json 支持函数级指标

5.3 可扩展性强

  • JSON 字段支持动态指标扩展
  • 模块化表设计,便于功能迭代
  • 预留多仓库对比的数据结构

5.4 可追溯性

  • operation_log 记录关键操作
  • analysis_task 记录完整的分析过程
  • commit_hash 支持版本追溯

六、后续优化方向

  1. 索引优化:根据查询频率添加联合索引
  2. 分区策略:对日志表按时间分区
  3. 缓存设计:引入 Redis 缓存热点数据
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 1:13:40

验收检测报告怎么写才靠谱

关于软件项目验收检测报告,实际上它是给予甲方以及乙方的一种“定心保障”。软件进行交付之际,究竟是否存在问题、可不可以正式上线,完全依据这份报告来判定。然而在实际情况中,许多项目正是由于验收环节敷衍了事,所以…

作者头像 李华
网站建设 2026/4/16 1:10:13

STM32的ADC采样率到底能跑多快?实测F103ZE的HAL库+DMA方案,挑战1Msps

STM32F103ZET6 ADC极限性能测试:HAL库DMA实现1Msps高速采样的实战解析 在嵌入式数据采集领域,ADC采样率直接决定了系统捕获快速变化信号的能力。作为经典入门级MCU,STM32F103ZET6的72MHz主频下ADC性能究竟能达到什么水平?本文将带…

作者头像 李华
网站建设 2026/4/16 1:08:13

【多模态大模型监控告警体系构建指南】:20年SRE专家亲授5大核心模块、7类典型失效场景与实时拦截SOP

第一章:多模态大模型监控告警体系的演进逻辑与核心范式 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在视觉理解、语音合成、跨模态检索等任务中展现出强大能力,但其推理路径不可见、输出不确定性高、资源消耗波动剧烈,传统单…

作者头像 李华
网站建设 2026/4/16 1:05:25

什么是SRE

对,本质就是高级运维,但不是你印象里那种传统运维。 大白话一句话: SRE 会写代码、懂算法、懂架构的超级运维。 跟普通运维的区别,用最土的话说: • 传统运维 服务器挂了 → 重启 流量大了 → 加机器 出问题 → 人工排…

作者头像 李华