本页面介绍参照完整性的概念,因为它与 Cloud Healthcare API 中的 FHIR 存储区中的资源相关。
对于对同一存储区中其他资源的引用,FHIR 存储区会强制执行参照完整性:
- 创建、更新或修补资源时,如果资源的结果内容包含对不存在的资源或资源版本的引用,则操作将失败。
- 删除资源时,如果存储区中有其他资源引用该资源,则操作将失败。
如果在创建存储区时设置 disableReferentialIntegrity
选项,可以停用参照完整性。
例外与限制
FHIR 规范允许各种形式的引用,其中一些不在参照完整性范围内:
- 由网址指定的外部引用,该网址与 FHIR 存储区的基准网址不匹配。
- 由商业标识指定的逻辑引用。
- 仅包含人类可读显示字符串的引用。
- 已知问题:FHIR 扩展程序中的引用不受参照完整性的约束。
在某些情况下,某些 API 方法可能会导致参照完整性被破坏:
- FHIR 允许引用指向使用
[resource type]/[resource ID]/_history/[version ID]
格式的资源的特定历史版本。创建或更新这些引用时,将对这些引用应用参照完整性,但使用Resource-purge
方法移除资源的历史版本时,系统不会检查传入的引用。 - FHIR
import
方法不会强制执行参照完整性。如果不需要参照完整性,或者已知输入满足参照完整性,则可以使用该方法。在后一种情况下,在成功导入每个资源后,FHIR 存储区内的引用将达到最终一致性。 deidentify
方法可能会在操作期间暂时不满足参照完整性的状态中创建 FHIR 存储区,或者如果使用过滤条件选择了资源子集,则永久性创建。
如果状态是强制执行了完整性但之前的一种情况破坏了完整性,将导致系统拒绝对包含无效引用的资源进行资源更新,除非更新可以修复或移除所有无效引用。此类状态还可能会给使用假定符合完整性的存储区的应用带来困难。
包含的资源
FHIR 规范包含一个限制条件,即每个包含的资源都必须引用自其所在资源中的某个位置(包括来自其他包含的资源的引用),并且对包含的资源的每个引用都必须有效。此限制条件与参照完整性分开实施,且无法禁用,因为它是在每个资源的 FHIRPath 不变量中定义的。