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%”。公式字段必须声明依赖字段、计算表达式、结果精度与单位,且只读不可手改。当依赖字段为空或单位不一致时,公式应返回“待计算”而非错误数值。
二、校验规则的分级设计
校验规则不应只有“通过/不通过”两种结果,而应分为阻断级与警告级。阻断级规则用于防止数据失去意义,例如数值字段为空、日期倒置、公式依赖缺失、单位不在受控词表内。警告级规则用于提示可疑但可能合理的情况,例如称样量偏离历史均值30%、反应温度超出常规区间、平行样相对偏差大于5%。警告级允许实验者填写理由后继续提交,理由本身作为文本字段被记录,从而在“不打断实验”与“保留可追溯性”之间取得平衡。
校验时机同样重要。字段级校验在失焦时即时反馈,跨字段校验在保存草稿时执行,完整性与签名校验在正式提交时执行。若把所有校验都压到提交时,实验者会面对一屏错误而难以定位;若全部即时执行,又会在填写过程中频繁打断。推荐的做法是:类型与格式即时校验,范围与跨字段在保存时校验,完整性与版本在提交时校验。
三、默认值与联动逻辑
默认值分为静态与动态两类。静态默认值适合稳定不变的取值,如单位默认“g”、样品状态默认“待测”、实验类型默认“常规”。动态默认值适合随上下文变化的取值,如实验日期默认当前日期、操作人默认当前登录用户、项目编号默认当前项目。默认值的设计原则是“减少重复输入,但不替实验者做判断”——凡是需要实验者观察后才能填写的字段(如实际现象、实测值),不应设置默认值,否则会造成“默认值被误当作实测值”的严重问题。
联动逻辑让字段之间产生依赖。典型场景包括:枚举“样品状态”选择“沉淀”时,显示“沉淀颜色与形态”文本字段;数值“质量”和“体积”填写后,公式字段“密度”自动计算;日期“结束时间”早于“开始时间”时,阻断提交并提示。联动逻辑必须显式声明依赖关系,避免形成循环依赖(A依赖B、B又依赖A),否则公式无法求解。对于公式字段,当任一依赖字段为空时,应显示“待计算”而非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模板从“电子表格”走向“结构化知识资产”的分水岭。类型决定了数据能做什么,约束决定了数据可信到什么程度,默认值与联动决定了填写效率,而完整性分层决定了这些数据在复用、审计与知识挖掘时是否仍然可靠。把这几件事在模板设计阶段想清楚,后续的知识复用才有稳固的数据底座。