每条数据都要能回答:它从哪里来

在 MolScience 中,来源不是附注,而是数据模型的一部分。

在一个化学数据库里,数字看起来都一样:熔点 135.0,分子量 180.16,logP 1.31。但它们的证据强度可能完全不同。

三种数字,不是一种事实

  • 实验测量:在特定条件、仪器和样品下得到的观测值,通常伴随误差与实验条件。
  • 软件计算:由明确的算法和参数得到的结果,可复现,但依赖模型假设。
  • 模型预测:从数据中学习到的估计,适用范围由训练数据和方法决定。

如果数据库只保存最后的数值,使用者就无法判断它能否用于自己的问题。更糟的是,预测值可能被后续使用者当作实验事实继续引用,误差在传播中被隐藏。

一条记录需要保留什么

我们把来源信息当作记录的一部分,而不是页面底部的脚注。当前设计中,一条性质记录至少需要关联以下字段:

  • 来源类型与引用:实验文献、数据库、软件或模型。
  • 方法与版本:实验条件、算法、参数或模型版本。
  • 原始值与单位:保留原始表达,避免转换过程不可逆。
  • 许可与可用范围:外部数据是否允许再分发。
  • 质量标记:缺失、冲突、异常或尚未核验。
json
{  "entity": "molecule:aspirin",  "property": "melting_point",  "value": 135.0,  "unit": "°C",  "source": {    "type": "experiment",    "reference": "literature:...",    "method": "capillary melting point"  },  "quality": "unverified",  "version": "2026-11"}
数据模型示意,不是当前数据库的最终 schema。

冲突怎么办

不同来源给出不同数值时,最方便的做法是取平均,最诚实的做法是保留差异。我们倾向于后者:让每条记录带着自己的来源并存,并允许使用者按来源、方法或质量筛选。

这会让界面和查询更复杂,也会让“一个分子一个值”的期待落空。但化学数据本来就不是这样工作的。数据库的职责不是制造唯一答案,而是让差异可见。

我们还在学习如何把这件事做得更好。数据模型会变化,规则会被推翻,部分判断仍然需要化学知识。把过程记录下来,至少能让后来者知道我们为什么这样选择。

本文记录的是发布时的情况。项目进展以 Work 与 molscience.org 为准。

PUBLISHED 2026.11.06 / CHEMAI