关系模型¶
关系代表 Tracker 模型中两个实体之间的链接。A 关系在 DHIS2 中被视为数据,基于关系类型、 类似于跟踪实体是基于跟踪实体类型。
关系总是连接两个实体,这些实体可以包括跟踪实体、注册和事件,以及它们的任意组合。 实体、注册和事件,以及这些实体的任意组合。请注意 所有这些组合目前都无法通过用户界面使用。
实体之间的关系可分为单向关系和双向关系,每种类型的关系在创建时需要不同级别的访问权限。 每种关系的创建都需要不同级别的访问权限。
- 单向关系要求用户具备以下条件
- 对 "来自 "实体的写入访问
- 对 "至 "实体的读取访问
- 双向关系要求对 "发件人 "和 "收件人 "实体都有写访问权限。
从 [tracker exporter endpoint](#webapi_tracker_export)检索关系时,只显示那些源于 的关系。这意味着该实体要么是双向关系的一部分 或单向关系中的 "来自 "实体。
关系类型¶
关系类型是关系具有的属性的定义。 关系始终包含两个方面,分别称为“从”和“到”,以及 每边可以包含哪些实体由关系确定 类型。确定每个属性可以包含的属性称为 约束,分别来自fromConstraint和toConstraint。这些约束是 在以后处理数据时很重要,以了解之间的关系 可以也不能包含。
关系类型中定义的每个约束都包含几个 属性。主要属性是关系实体,它决定什么 关系可以包含的一种实体。实体可以是 每个约束如下:
- 跟踪实体
- Shallow copy { #shallow-copy }
- 合并策略(DISCARD 或 LAST_UPDATED)
根据您选择的关系实体的类型,可以选择 每个约束的其他限制。下表说明了 您可以配置不同的组合:
| 跟踪实体实例 | Shallow copy { #shallow-copy } | 合并策略(DISCARD 或 LAST_UPDATED) | |
|---|---|---|---|
| ```json | |||
| { | |||
| "style": { | |||
| "color": "#ffffff", | |||
| "icon": "my-beautiful-icon" | |||
| } | |||
| } | |||
| ``` | 检索和删除项目通知模板 | 可选的 | Note that synthetic fields displayName and displayShortName are always |
returning the translated value independent of the translate parameter. | |||
| IndicatorGroup | Note that synthetic fields displayName and displayShortName are always | ||
returning the translated value independent of the translate parameter. | 检索和删除项目通知模板 | Note that synthetic fields displayName and displayShortName are always | |
returning the translated value independent of the translate parameter. | |||
| 关系(跟踪器) | Note that synthetic fields displayName and displayShortName are always | ||
returning the translated value independent of the translate parameter. | 检索和删除项目通知模板 | 可选的 |
这些附加限制将要求实体在创建前符合限制设置。 才能创建。例如,如果您的关系是 母亲和孩子之间的关系,这两个限制条件都会将所需的跟踪实体 类型设置为 "人",并可选择将 "注册 "分别设置为 "孕产妇保健计划 "和 "儿童计划"。 计划和儿童计划。这样,只有 类型的被跟踪实体,且其注册了所需的计划。 包含在这些关系中。
除了关系类型定义的约束外,每个关系还可以配置为双向关系、 真或假。
- 如果属性设置为 false,则关系是单向的。
- 如果设置为 "true",则关系是双向的。 正如前面在 here 中提到的,此设置会影响创建关系所需的访问级别、 以及导出关系中的实体时显示的关系。
关于双向关系要注意的一件事是 “从”和“到”两面在数据库中仍然很重要,这意味着每个实体 必须匹配该侧的约束。但是,从用户角度来看, 在每个方面,每个实体的存储都是无关紧要的。
示例{ #relationship_model_example }¶
可能的关系连接类型示意图](resources/images/relationship_model/relationships.png)
- 双向关系 relA 将 teA 连接到 teB,并将 teB 连接到 teA。
- 单向关系 relB 连接 teA 和 teC ,但不连接 teC 和 teA。
- teA 源自关系 relA 和 relB。
- teB 源自关系 relA。
- *teC*不产生任何关系。
- relA 源自 teA 和 teB,指向 teA 和 teB。
- relB 源自 teA 并指向 teC。