2. SNOMED CT术语体系结构解析
SNOMED CT不是一张“词表”,而是一套以逻辑为骨架、以版本为生命周期的临床术语系统。集成工程中绝大多数“映射不上、检索不到、升级后语义漂移”的问题,根源都在于没有真正理解它的五层结构:概念、描述、关系、引用集、历史与版本。本节按这五层逐一拆解,并说明每一层对集成工程的具体约束。
一、概念:语义的唯一锚点
概念(Concept)是SNOMED CT中“一个临床含义”的唯一标识,用SCTID(如 73211009 表示 Diabetes mellitus)表示。概念本身不携带任何人类可读文字,它只是一个逻辑节点。这一点对集成工程至关重要:系统间交换的应当是SCTID,而不是术语字符串。如果把“糖尿病”这个中文词当作主键,一旦描述变更或出现同义词,映射就会断裂。
概念通过IS-A关系构成多根有向无环图,顶层分为临床发现、操作、情景、可观察实体等层级。集成时常见的错误是把“概念层级深度”当作“临床特异性”直接使用,实际上同一深度下不同分支的粒度并不一致,必须结合关系约束判断。
二、描述:概念的语言外壳
描述(Description)是概念的可读表达,分为FSN(全称)、PT(首选术语)和同义词三类。一个概念可以有多个描述,但同一语言下只有一个PT。集成工程的关键约束是:界面展示用PT,检索索引应覆盖FSN与同义词,而存储与交换用SCTID。若只索引PT,用户输入“心梗”可能查不到“心肌梗死”;若把同义词当作独立概念入库,则会产生重复语义节点。
三、关系:语义的机器可计算部分
关系(Relationship)分为IS-A(层级)与属性关系(如 Finding site、Associated morphology)。属性关系让SNOMED CT具备“后组合”能力:73211009 | Diabetes mellitus | : 363698007 | Finding site | = 15776009 | Pancreas structure |。集成中若只存SCTID而不存关系,就丢失了推理能力;若把后组合表达式拆成独立概念,则破坏了语义完整性。建议在数据模型中保留“概念ID + 关系三元组”的结构,而不是压平为单字段。
四、引用集:把“通用术语”裁剪为“本地可用”
引用集(Reference Set)是SNOMED CT的扩展机制,用于表达语言偏好、映射、子集、模块依赖等。集成工程中最常用的是三类:语言引用集(决定某地区PT)、映射引用集(如SNOMED CT到ICD-10)、以及自定义子集(如“本院检验项目”)。引用集的关键特性是它本身也随版本发布,因此映射关系不能脱离版本单独维护。实践中建议把引用集ID与版本号一起写入映射表主键。
五、历史与版本:集成工程最容易被低估的一层
SNOMED CT每半年发布一次国际版,概念可能被标记为Inactive,并通过“SAME AS”或“REPLACED BY”指向新概念。集成系统若只做一次性映射,升级后会出现“旧SCTID查不到描述”或“映射到已失效概念”的问题。正确做法是:在本地维护一张概念历史表,记录 oldSCTID → newSCTID → 生效版本,并在ETL或查询层做重定向。
六、对集成工程的落地建议
- 数据模型:概念表存SCTID与状态;描述表存SCTID、语言、类型、术语;关系表存源概念、类型、目标概念;引用集成员表存引用集ID、SCTID、版本。
- 接口契约:对外接口以SCTID为参数,禁止用术语字符串做业务主键;返回时附带PT与版本号。
- 升级流程:先加载新版本到影子表,比对差异(新增、失效、替代),再切换映射重定向规则,最后回归检索与决策规则。
- 映射维护:每条映射记录必须包含源系统码、SCTID、引用集ID、版本号、生效时间与失效时间。