4.1 配置比赛数据
Domjudge 主要通过MySQL数据库存储、提取数据。某些信息必须先行配置,而后 Domjudge 将自动填写其余表格。
下面所述的多种数据类型都你可以通过裁判 web 页面( Jery web interface )进行添加,编辑和删除。我们建议你随身携带某一版本的 phpMyAdmin 以应对突发情况,或者你也可以用他来进行通用的数据库操作,例如导入导出数据等。
这一部分描述了每一个表的含义以及你应该向其中导入的数据。带有*标记的表格需要你在比赛开始前将所有数据(通过裁判 web 界面或使用 phpMyAdmin )配置完成,其他表格将由程序自动使用。
auditlog
记录所有状态改变事件
balloon
需要分发的气球
clarification
存储所有 clarification 请求或回复
*
configuration
运行时的配置设置
*
contest
比赛的参数,包含开始、结束时间
*
contest problem
比赛的问题和该问题的数据
*
contest team
参赛队伍
event
比赛中事件的记录
*
executable
可执行的编译、运行、比较的脚本
internal_error
存储评测机出现的问题,其中包括日志问题
judgehost
用作评测机的电脑(主机名)
*
judgehost_restriction
评测机选取提交的代码时的(可选)限制
judging
评测中的提交
judging_run
一次评测中的某一个测试点的结果
*
language
定义可选的提交语言
*
problem
问题的定义(名称,限时等)
rankcache
为公众/队伍以及为裁判提供的队伍排名数据的缓存
rejudging
批量重新评测的元数据
role
可能的用户角色
以下是对每一个需要手动填写的表格的详细描述(包括列)。通常来说,每一个表都有一个标识符字段。他们大多数都是纯数字并自动升序排列,这样的不需要明确指定。但是 executablelanguage 表有字符串类型的标识符字段,他们需要手动配置,并且只允许使用数字、字母、横杠和下划线,即a-zA-Z-_

configuration

该表包含配置设置。这些输入被简单存储为 <name , value> 元组,其中 value 应用 JSON 编码,data 包含了允许的数据类型,description 记录了配置设置。

contest

软件将要运行的比赛,比如说一个测试会话和进行中的比赛。
cid 是一个引用ID,contestname 是用于接口的描述性名称,shortname 是公众可见、标识符。
activetime, starttime, endtime 是必须的列,用以指定比赛的开始时间和开始提交时间。可选的 freezetimeunfreezetime 控制着封榜时间以及 deactivetime 当比赛不在可见。这些选项的详细处理参见4.2(比赛里程碑)。除 starttime 外,所有时间都可以相对 starttime 设定。裁判界面的输入(无论是相对还是绝对)存储在 *time_string 列,同时计算出的绝对时间被存储在没有 _string 后缀的列中。
public 列可用于限制哪一场比赛被公开展示(相对于私下展示给一些钦点的队伍来说)。enable 可用于(暂时)停止一场比赛。

contestproblem

这张表将比赛与题目配对:cidprobid 描述了这个配对。 另外,这张表存储着比赛特定包含的题目数据:shortname 是题目在这场比赛中独一无二的标识符;points 默认为1并可以被设置为非偶数的得分;allow_submit 决定队伍是否可以提交该题目的解。不可提交的问题也不会被展示在得分榜上。这可以用于定义空闲问题,他们可以迅速被添加进比赛中。参阅语言部分。

contestteam

这张表将参赛队伍和比赛配对。队伍只能提交他们参与的比赛或面向公众的比赛中的题目的解。

executable

这张表存储着用于编译、运行、比较的压缩后的可执行脚本。

judgehost_restriction

这张表编码着提供给任何一台评测机的提交的限制。限制用JSON编码,存放在restriction栏中,并且可以在管理员接口中设置来限制特定的比赛、问题、语言或永远不再同一台评测机上进行rejudge。一个限制可以在评测机总览的编辑页面上分配给一台或几台评测机。

language

提交中可接受的用于评测的编程语言。langid 是指向语言的最大为八位的一个字符串。name 是用于展示的语言名称;extensions 是一个 JSON 编码的认可的拓展名列表;allow_submit 决定了那些队伍可以用该语言提交;allow_judge 决定评测机是否可以对该问题进行评测。例如,这样可以在某种语言出现问题时设置为 no 以暂停评测,并在问题解决后设置为 yes 继续评测。
time_limit是一个相对于标准时间限制而言的因子,表示该语言的时限可以放宽多少倍;compile_script 指向一个用于该语言的可执行编译脚本。

problem

这张表包含了对问题的定义。probid 是引用ID,cid 是问题(唯一)所属的比赛的ID:一个问题不能被应用于多场比赛中。name 是问题的完整名称(描述)。
allow_submit 确定参赛队伍是否可以提交该问题。不可提交的问题也不会出现在得分榜上。这可以用于定义多余的问题,来使他们可以迅速添加进比赛中。参见语言的解释部分(See also the explanation for language)。
timelimit 是题目的以秒为单位的时间限制(同时考虑每种语言的 time_factor )。参见 A.8(时间限制的加强)。
memlimit 是该问题的以 kB 为单位的内存限制。如果参数为空那么通用配置设置中的 memery_limit 将会被调用。与 outputlimit 等价。
special_run 不为空那么他定义了一个客制化的 run_<special_run> 程序来运行已编译的提交。若 special_compare 不为空他定义了一个客制化的 comapre_<special_compare> 程序来验证运行结果。
color 标签可以被CSS颜色指定填充来与题目相关联。参看 6.2.1(得分榜:颜色)。
problemtext 中可以放置包含题目描述的 PDF、HTML 或纯文本文档以供队伍、公众或裁判下载。注意没有多余的筛选,因此 HTML (以及部分 PDF )文件应来源于可信任的渠道以防止 XSS 等攻击。文件类型被存储在 problemtext_type 中。

team

参赛队伍的表格:teamid 是队伍的(内部)ID;externalid 可用于存储向其他设备导出或导入时的 ID 。name 是队伍用于展示的名称,categoryid 是队伍所属类别的 ID。affilid 是队伍所属机构的 ID。
enable 被设置为 0,队伍将立刻从得分榜消失并且不能再访问队伍页面,即使他们可能早已登录。一个应用场景就是开除现场队伍的参赛资格。
members 是队伍成员的名字,用换行符分隔;room 是参赛队伍的位置或房间。这两个仅用于展示。comments 是备注,可随意填写,并且仅裁判可见。时间戳 teampage_first_visited 以及 hostname 列指明何时何地以及是否该队伍访问了他的队伍页面。
penalty 列可用于给予该队伍一定的罚时(可正可负)来更正意料之外的错误。

team_affiliation

affilid 是引用 ID,name 是该机构的名称。country 应该由3个字符组成(参考ISO 3166-1 alpha-3 abbreviation标准)。comment 是一个向裁判界面展示的自由表格。
国旗可以展示在得分榜上。想要该功能奏效,country 列必须匹配 webapp/web/images/countries/.png 中的一张图片。所有国家的国旗都要在该路径下展示,由 3-character ISO 国家代码命名。参见webapp/web/images/countries/.png

team_category

categoryid 是引用 ID。name 是一个字符串,代表该类别的名称。sortorder 是该队伍榜单中的排序顺序。大数排名靠下,若相等则按照得分排序。
color 仍然是一个 CSS 指定用于简单分辨不同的类别。参见 6.2.1。
visible 决定了该队伍是否该队伍会在公众/队伍得分榜上展示。该特性可用于将队伍分配到另外的不可见的榜单上来将队伍从公众榜上剔除。

testcase

测试样例表存储着每一个题目的测试数据:testcaseid 是一个唯一的标识符;inputoutput 包含着输入输出数据;image 是一个为裁判准备的可选的测试样例表示。md5_inputmd5_outputmd5_image 包含了用于验证评测机所缓存数据的时效性的 md5 哈希。image_typeimage_type 包含着索引图的缩略图和他的哑型( mimetype )字符串。probid 列存储着对应的题目。rank 决定任何一道题目的测试数据的顺序。description 是一个可选的对测试用例的描述。参看 4.4。

user

这张表包含着系统知道登录等级的用户的信息。每个用户可以有一个或多个身份,比如可以是一名队员,一位裁判或一个管理员。还可以有功能账户,例如裁判守护进程( judgedeamons )。