2.3. 数据描述

2.3.1. 数据建模

2.3.2. 数据字典

  • 用户(User)

    • username: 唯一的文本字段,用户的唯一标识符。

    • email: 可选的文本字段,用户的电子邮件地址。

    • create_time: 自动设置的日期时间字段,记录用户的创建时间。

    • admin_type: 文本字段,默认值为“Regular User”,表示用户的管理类型。

    • character: 选择字段,选项为 'student' 或 'teacher',默认为 'student'。

    • problem_permission: 文本字段,默认为“None”,定义用户对问题的访问权限。

    • auth_token: 可选的文本字段,用于单点登录认证。

    • two_factor_auth: 布尔字段,默认为False,指示是否启用两因素认证。

    • tfa_token: 可选的文本字段,两因素认证的临时令牌。

    • session_keys: JSON字段,默认为空列表,存储会话密钥。

    • open_api: 布尔字段,默认为False,指示是否开启开放API。

    • open_api_appkey: 可选的文本字段,开放API的应用密钥。

    • is_disabled: 布尔字段,默认为False,指示用户是否被禁用。

  • 题目

    • _id: 文本字段,具有数据库索引,用于显示的问题ID。

    • contest: 可选的外键,关联到Contest,表示问题所属的比赛。

    • is_public: 布尔字段,表示问题是否公开可见。

    • title: 文本字段,问题的标题。

    • description: 富文本字段,问题的描述。

    • input_description: 富文本字段,问题的输入描述。

    • output_description: 富文本字段,问题的输出描述。

    • samples: JSON字段,存储问题的样本输入输出。

    • test_case_id: 文本字段,关联的测试用例ID。

    • test_case_score: JSON字段,测试用例的分数。

    • hint: 可选的富文本字段,问题提示。

    • languages: JSON字段,支持的编程语言。

    • template: JSON字段,代码模板。

    • create_time: 自动设置的日期时间字段,问题的创建时间。

    • last_update_time: 可选的日期时间字段,问题的最后更新时间。

    • created_by: 外键,关联到User,问题的创建者。

    • time_limit: 整数字段,执行时间限制(毫秒)。

    • memory_limit: 整数字段,内存限制(MB)。

    • io_mode: JSON字段,定义输入输出模式。

    • spj: 布尔字段,指示是否使用特殊判题方法。

    • spj_language: 可选的文本字段,特殊判题使用的编程语言。

    • spj_code: 可选的文本字段,特殊判题的代码。

    • spj_version: 可选的文本字段,特殊判题的版本。

    • spj_compile_ok: 布尔字段,特殊判题编译是否成功。

    • rule_type: 文本字段,问题的规则类型(例如ACM, OI)。

    • visible: 布尔字段,表示问题是否可见。

    • difficulty: 文本字段,问题难度(例如High, Mid, Low)。

    • tags: 多对多关系,关联到ProblemTag,问题的标签。

    • source: 可选的文本字段,问题的来源。

  • 比赛

    • title: 文本字段,比赛的标题。

    • description: 富文本字段,比赛的详细描述。

    • real_time_rank: 布尔字段,是否实时显示排名。

    • password: 可选的文本字段,比赛的访问密码。

    • rule_type: 文本字段,比赛的规则类型。

    • start_time: 日期时间字段,比赛开始时间。

    • end_time: 日期时间字段,比赛结束时间。

    • reate_time: 自动设置的日期时间字段,比赛的创建时间。

    • last_update_time: 自动更新的日期时间字段,比赛的最后更新时间。

    • created_by: 外键,关联到User,比赛的创建者。

    • visible: 布尔字段,表示比赛是否可见。

    • allowed_ip_ranges: JSON字段,允许访问比赛的IP范围。

  • 提交 (Submission)

    • id: 文本字段,提交的唯一标识符,主键。

    • contest: 可选的外键,关联到Contest,表示提交所属的比赛。

    • problem: 外键,关联到Problem,表示提交的问题。

    • create_time: 自动设置的日期时间字段,记录提交的创建时间。

    • user_id: 整数字段,表示提交用户的ID,具有数据库索引。

    • username: 文本字段,提交用户的用户名。

    • code: 文本字段,用户提交的代码。

    • result: 整数字段,表示提交的结果,如通过、错误等,默认为待判状态(Pending)。

    • info: JSON字段,存储判题返回的详细信息。

    • language: 文本字段,表示提交所用的编程语言。

    • shared: 布尔字段,表示是否共享此提交,默认为False。

    • statistic_info: JSON字段,存储提交的统计信息,如时间和内存消耗。

    • ip: 可选的文本字段,提交时的IP地址。

  • 测试用例(TestCase)

    • input: 文本字段,表示测试用例的输入数据。

    • output: 文本字段,表示测试用例的输出数据。

    • score: 整数字段,表示此测试用例的分数,默认为0。

  • 问题标签(ProblemTag)

    • name: 文本字段,表示标签的名称

  • 比赛排名(ACMContestRank 和 OIContestRank)

    • user: 外键,关联到User,表示参与比赛的用户。

    • contest: 外键,关联到Contest,表示所属比赛。

    • submission_number: 整数字段,表示用户的提交次数。

    • accepted_number (ACM专有): 整数字段,表示通过的问题数。

    • total_time (ACM专有): 整数字段,表示总用时,包括错误尝试的惩罚时间。

    • submission_info (ACM和OI均有): JSON字段,存储关于提交的详细信息。

    • total_score (OI专有): 整数字段,表示用户在OI比赛中的总分。

  • 判题服务器 (JudgeServer)

    • hostname: 文本字段,服务器的主机名。

    • ip: 可选的文本字段,服务器的IP地址。

    • judger_version: 文本字段,判题服务器的版本。

    • cpu_core: 整数字段,服务器的CPU核心数。

    • memory_usage: 浮点字段,服务器的内存使用率。

    • cpu_usage: 浮点字段,服务器的CPU使用率。

    • last_heartbeat: 日期时间字段,服务器的最后心跳时间。

    • create_time: 自动设置的日期时间字段,服务器的创建时间。

    • task_number: 整数字段,服务器当前的任务数量。

    • service_url: 可选的文本字段,服务器的服务URL。

    • is_disabled: 布尔字段,表示服务器是否被禁用。

Last updated