4. 模板字段类型与约束设计

电子实验记录(ELN)模板的价值,不在于把纸质表格搬到屏幕上,而在于用字段类型和约束把“实验数据应该长什么样”固化下来。字段类型决定了数据在系统中的存储形态与可参与的计算方式,约束则决定了数据能否被接受、何时被接受、以及被接受后是否仍然自洽。本节围绕八类常用字段,说明它们各自适合承载什么信息、应配套哪些校验规则、默认值与联动逻辑如何设计,以及如何守住数据完整性。

一、八类字段的适用边界

文本字段用于承载不可枚举、长度不定的描述性内容,如样品外观、异常现象描述、操作备注。它应设置最大长度与是否允许换行,必要时用正则约束格式(如批号“字母+8位数字”)。文本字段不适合存放本可枚举的值,否则会因同义写法(“室温”“常温”“RT”)导致后续检索失效。

数值字段必须区分整数与小数,并明确精度与有效位。例如“称样量”设为小数、保留4位有效数字、单位固定为g。数值字段应设置合理区间,如pH在0~14之间、温度在-80~300℃之间,超出即触发警告而非静默接受。

单位字段通常不单独存在,而是与数值字段绑定为“数值+单位”复合结构。设计要点是:单位从受控词表中选择(g、mg、mL、μL、mol/L、rpm、℃),禁止自由输入;同一模板内同一物理量的单位应统一,若允许换算,需在字段级声明基准单位与换算系数,避免“1.5 g”与“1500 mg”被当作两个不同量级的数据。

日期与时间字段用于记录实验开始、取样、终止等时间点。应区分“日期”与“日期时间”,并约束取值范围(不得晚于当前时间、不得早于项目立项时间)。对于需要计算时长的场景,应同时保留起止两个时间字段,由系统计算间隔,而不是让实验者手填“反应2小时”。

枚举字段用于取值有限且互斥的情形,如样品状态(澄清/微浊/浑浊/沉淀)、实验结论(通过/不通过/待复测)。枚举应使用单选;若允许多选,需明确是否互斥。枚举值是后续统计与筛选的基础,因此必须受控,不能允许“其他”后跟自由文本而不做归类。

表格字段用于承载结构化的重复测量数据,如平行样、时间序列、多批次结果。表格字段应定义列名、列类型、行数上下限,并支持行内校验(如每行浓度必须为正)。表格是ELN中最容易失控的字段,必须限制最大行数并禁止合并单元格,以保证可解析。

文件字段用于挂载原始谱图、仪器导出文件、照片、扫描件。应约束文件类型(如.pdf、.csv、.png)、单文件大小上限与总容量,并要求填写文件说明与采集时间。文件字段本身不参与计算,但它是数据可追溯性的关键证据。

公式字段用于由其他字段自动计算派生值,如“摩尔浓度 = 质量 / (摩尔质量 × 体积)”“收率 = 实际产量 / 理论产量 × 100%”。公式字段必须声明依赖字段、计算表达式、结果精度与单位,且只读不可手改。当依赖字段为空或单位不一致时,公式应返回“待计算”而非错误数值。

ELN模板字段类型、约束与联动关系 字段类型 文本 text 描述/备注/批号 数值 number 精度/区间/有效位 单位 unit 受控词表/基准单位 日期 date 范围/起止成对 枚举 enum 单选/互斥/受控 表格 table 列类型/行数限制 文件 file 类型/大小/说明 公式 formula 依赖/只读/精度 校验规则 必填 / 非空 关键字段不可跳过 范围 / 精度 pH 0~14,称量4位 格式 / 正则 批号、编号规则 跨字段一致性 起止时间、单位匹配 唯一性 样品编号不重复 提交时校验 保存草稿 vs 正式提交 警告级 vs 阻断级 默认值 · 联动 · 数据完整性 默认值策略 • 静态默认:单位=g、状态=待测 • 动态默认:当前日期、当前操作人 联动逻辑 • 枚举“样品状态=沉淀” → 显示“沉淀描述” • 数值“浓度”变化 → 公式“摩尔浓度”重算 • 日期“结束时间” < “开始时间” → 阻断提交 数据完整性四道关 ① 字段级:类型、范围、必填 ② 记录级:跨字段一致、公式可算 ③ 模板级:单位统一、枚举受控 ④ 提交级:签名、时间戳、版本锁定 常见失效模式 • 单位自由输入 → 量级混乱 • 公式依赖空值 → 显示错误数值 • 表格无行数上限 → 解析失败 • 枚举含“其他”无归类 → 统计失真

二、校验规则的分级设计

校验规则不应只有“通过/不通过”两种结果,而应分为阻断级与警告级。阻断级规则用于防止数据失去意义,例如数值字段为空、日期倒置、公式依赖缺失、单位不在受控词表内。警告级规则用于提示可疑但可能合理的情况,例如称样量偏离历史均值30%、反应温度超出常规区间、平行样相对偏差大于5%。警告级允许实验者填写理由后继续提交,理由本身作为文本字段被记录,从而在“不打断实验”与“保留可追溯性”之间取得平衡。

校验时机同样重要。字段级校验在失焦时即时反馈,跨字段校验在保存草稿时执行,完整性与签名校验在正式提交时执行。若把所有校验都压到提交时,实验者会面对一屏错误而难以定位;若全部即时执行,又会在填写过程中频繁打断。推荐的做法是:类型与格式即时校验,范围与跨字段在保存时校验,完整性与版本在提交时校验。

三、默认值与联动逻辑

默认值分为静态与动态两类。静态默认值适合稳定不变的取值,如单位默认“g”、样品状态默认“待测”、实验类型默认“常规”。动态默认值适合随上下文变化的取值,如实验日期默认当前日期、操作人默认当前登录用户、项目编号默认当前项目。默认值的设计原则是“减少重复输入,但不替实验者做判断”——凡是需要实验者观察后才能填写的字段(如实际现象、实测值),不应设置默认值,否则会造成“默认值被误当作实测值”的严重问题。

联动逻辑让字段之间产生依赖。典型场景包括:枚举“样品状态”选择“沉淀”时,显示“沉淀颜色与形态”文本字段;数值“质量”和“体积”填写后,公式字段“密度”自动计算;日期“结束时间”早于“开始时间”时,阻断提交并提示。联动逻辑必须显式声明依赖关系,避免形成循环依赖(A依赖B、B又依赖A),否则公式无法求解。对于公式字段,当任一依赖字段为空时,应显示“待计算”而非0或错误值,防止空值被误读为真实结果。

四、数据完整性的四道关

数据完整性不是单一校验能保证的,需要分层防守。字段级保证每个值本身合法;记录级保证同一条记录内字段之间自洽,如起止时间、数值与单位、公式与依赖;模板级保证同一模板内单位统一、枚举受控、表格列类型一致;提交级通过签名、时间戳与版本锁定,保证记录一旦提交不可静默修改,任何变更都留下审计痕迹。

常见失效模式值得警惕:单位字段允许自由输入,会导致“g”与“mg”混用而量级错误;公式字段在依赖为空时返回0,会被误认为真实计算结果;表格字段不限制行数,导出时可能因超长而解析失败;枚举字段保留“其他”却不要求归类,会使后续统计出现大量无法归并的类别。这些问题的共同点是:设计时省了一点约束,使用时就要用大量人工核对来弥补。

五、可参考的字段约束配置示例

下面给出一段模板字段定义的配置片段,展示数值、单位、公式与联动约束如何声明。示例中的参数为教学假设值,实际使用时需按实验室SOP调整。

fields:
  - id: sample_mass
    type: number
    label: 称样量
    unit: g
    precision: 4
    min: 0.0001
    max: 100
    required: true
    default: null

  - id: sample_volume
    type: number
    label: 定容体积
    unit: mL
    precision: 2
    min: 0.1
    max: 1000
    required: true

  - id: concentration
    type: formula
    label: 浓度
    unit: mol/L
    depends_on: [sample_mass, sample_volume, molar_mass]
    expression: "sample_mass / (molar_mass * sample_volume / 1000)"
    precision: 6
    readonly: true
    empty_policy: pending   # 依赖为空时显示“待计算”

  - id: sample_state
    type: enum
    label: 样品状态
    options: [澄清, 微浊, 浑浊, 沉淀]
    required: true

  - id: precipitate_desc
    type: text
    label: 沉淀颜色与形态
    max_length: 200
    visible_when: "sample_state == '沉淀'"
    required_when: "sample_state == '沉淀'"

  - id: start_time
    type: datetime
    label: 开始时间
    default: now
    required: true

  - id: end_time
    type: datetime
    label: 结束时间
    required: true
    rule: "end_time >= start_time"   # 阻断级

这段配置体现了几个关键设计:数值字段声明精度与区间;公式字段声明依赖、表达式、精度与空值策略;枚举字段的取值受控;文本字段通过visible_when与required_when实现联动;日期字段通过rule声明跨字段约束。把这些约束写进模板,实验者填写时就能得到即时反馈,数据进入知识库后也具备可计算、可检索、可追溯的基础。

设计模板时可以先问三个问题:这个字段的值是否会被用于计算或统计?如果是,它必须是数值、日期或枚举,不能是自由文本。这个字段是否依赖其他字段?如果是,必须显式声明依赖与空值策略。这个字段填错是否会导致结论错误?如果是,应设为阻断级校验,而不是警告级。

字段类型与约束设计是ELN模板从“电子表格”走向“结构化知识资产”的分水岭。类型决定了数据能做什么,约束决定了数据可信到什么程度,默认值与联动决定了填写效率,而完整性分层决定了这些数据在复用、审计与知识挖掘时是否仍然可靠。把这几件事在模板设计阶段想清楚,后续的知识复用才有稳固的数据底座。