---
order: 7
---
# 关联关系

关联关系是指在数据模型中各个实体或对象之间的相互联系。例如，在员工信息管理中，员工与部门之间的关系、员工与报销单之间的关系等，都体现了这些实体之间的关联关系。这些关系可以通过不同的[关联关系类型](#relation-types)（如维表关联、主从关联等）来描述，从而帮助我们理解系统模型之间的关系和数据的流动。

## 自动发现关联关系{#auto-discovery}

系统在需要关联关系时，会优先使用模型上显式设置的关联关系，如果没有设置关联关系，系统还会使用[一致性维度](./conformed-dimension.md)来自动发现关联关系。主要用于如下场景：

1. 数据加工中自动推测关联关系

数据加工使用关联节点关联两个模型时，如果没有设置关联关系，系统会自动根据一致性维度来推测关联关系，示例参考：[数据加工关联查询](#df-relation)。

2. 跨表汇总分析查询时自动发现关联关系

模型上设置的关联关系通常主要用于原始明细行的查询，在跨表按维度汇总统计时需要把不同表的汇总结果集关联起来展示，此时系统会根据一致性维度来发现关联关系，示例参考：[跨源分组汇总查询](#cross-group-query)。

## 关联关系类型{#relation-types}

模型上显式设置的关联关系根据关联类型分为三种：

- **事实表间关联**：[事实表](../GLOSSARY.md#fact-table)之间通过关联关系表达式进行关联，通常会使用多个字段并可以设置关联方向
- **维表关联**： 主表中的一个维键字段与[维表](../GLOSSARY.md#dimension-table)的主键对应，类似数据库的外键关联
- **主从关联**：主表主键与从表外键相关联，主要用于主从表提交、级联更新、删除。

![关联关系面板-企业](./images/demo-company.png)

示例地址：[关联关系-企业基本信息](https://demo.succbi.com/v5/DEMO/data?:open=UGOACvvHdkCmkIY51oQCyE&:tblview=modelRelations)

## 设置关联关系{#oper-steps}

![从元数据树新建维表关联](./images/meta-dim-relation.gif)

设置关联关系的操作步骤：

1. **打开关联关系设置对话框：** 从左侧资源树中定位到加工模型，右键并选中关联关系菜单，弹出关联关系对话框。更多入口参考[关联关系管理入口](#mgr-entry)
2. **添加关联关系：** 点击添加，选择一个与主表关联的表，系统会自动识别两个表的关联类型，你也可以手动切换关联类型，并设置具体的关联方式

### 关联关系管理入口{#mgr-entry}

|模型关系面板|元数据右键菜单|全局关联关系|
| ---- | ---- | ---- |
|![管理关联关系的入口-关联关系面板](./images/entry-model-panel.png)|![管理关联关系的入口-元数据右键菜单](./images/entry-meta-tree.png)|![管理关联关系的入口-全局关联关系视图](./images/entry-global-view.png)|

1. **关联关系面板：** 数据管理界面中打开目标模型的编辑器，从中部工具栏切换到关联关系面板，右键当前模型节点，选中**管理关联关系**
2. **元数据树右键菜单：** 数据管理界面中手动展开或通过元数据搜索框定位到目标模型，右键选择**关联关系**
3. **全局关联关系视图：** 数据管理界面中切换到[全局关联关系视图](#global-relations-view)，通过一级级展开目录找到目标模型，右键目标模型的节点，选中**管理关联关系**

## 关联关系设置对话框{#dialog}

关联关系对话框用于管理当前模型（下图“企业基本模型”）与其他模型的关联关系。

![关联关系对话框-维表关联](./images/dlg-relation.png)

1. **关系列表：** 列举了与本表关联的所有关联关系。鼠标移动到列表项上，可以点击**垃圾桶图标**删除该项。下方**添加**按钮可以添加新的关联关系
2. **关联类型：** 关联类型分为事实表关联和维表关联，不同的类型对应的**关联设置**不同
3. **关联设置：**
   1. 事实表间关联
      1. 关联模型：事实表间关联中，关系列表选中关系对应的另一模型（非当前模型）
      2. 连接条件：事实表间关联中，可以设置表达式或字段对应关系，来表示两个事实表如何关联到一起
      3. 更多事实表关联设置参考[Join关联](../../data-process/transform/join.md)
   2. 维表关联
      1. 主表：维表关系中，事实表的一方
      2. 关联维表：维表关系中，维表表的一方
      3. 主表维键：维表关系中，事实表的某一个字段
      4. 维表关联的关联条件是**事实表的维键=维表的主键**，维表关联会自动同步到[字段的关联表属性](./README.md#associated-table)
   3. 主从关联
      1. 主表：主从关系中，主表的一方，比如员工基本信息表
      2. 从表：主从关系中，从表的一方，比如员工职业经历表
      3. 从表外键：主从关系中，从表用于关联主表的外键字段，比如员工职业经历表中的员工ID

## 关联关系图{#relations-graph}

![关联关系面板-国家](./images/graph-relation.png)

1. 关联关系图的节点
   - 显示所有与当前模型（上图：“企业基本信息”）有关系的模型，鼠标移动到节点上会显示模型的具体的路径
   - 右键非当前模型，可以定位到关联模型的编辑界面
2. 关联关系图的连线
   - 绿色连线代表事实表关联，蓝色连线代表维表关联
   - **1-N**代表靠近**1**端的表的一行数据对应另一端表的多行数据
   - 未标明**1-N**，表示系统不能根据模型结构自动识别数据对应关系

## 全局关联关系视图{#global-relations-view}

全局关联关系视图用于展示整个项目中各个模块或目录之间的关联关系。在**数据>右上方**视图，切换到**关联关系**视图。

![切换到全局关联关系视图](./images/global-view-start.png)

1. 视图的窗口控制
   - 通过鼠标滚轮、触摸板双指缩放，可以控制视图的窗口缩放
   - 点击自适应按钮，会自动调整窗口大小以刚好将所有节点显示在窗口中
2. 目录的导航
   - 双击目录节点或右键菜单展开目录
   - 右键收起，将与右键节点的所有同级节点收起，显示它们的父节点
   - 展开全部、收起全部按钮可以展开所有目录或返回顶级目录
3. 查看、管理目录之间的关联关系
   - 查看目录之间的关系
   - 管理某个模型的关联关系
4. 全局关联关系视图与模型关系面板视图的区别
   - 全局关联关系显示整个项目的关联关系，而模型关系面板只显示当前模型相关的关联关系

## 应用场景{#scenes}

### 数据加工关联查询{#df-relation}

通常如果两个业务表间的关系是明确的，可以提前设置好关联关系方便更快、更准备的在数据加工中进行关联查询数据。如果没有提前设置关联关系，系统会自动发现关联关系。

比如在数据加工中拖入`企业基本信息表`和`企业投资关系表`进行关联查询时，系统会自动优先使用设置的关联关系，如果没有就会根据一致性维度自动推测。

![数据加工-智能关联](./images/apply-dataflow.png)

### 跨源明细查询{#cross-detail-query}

在Superpage嵌套浮动中，下级浮动数据集会自动根据上级浮动数据集的关联关系自动查询数据。

比如企业信息查询中，以卡片的形式展示企业的基本信息，同时在卡片底部通过关联关系从`企业主要人员表`中查询展示该企业的主要人员列表。

示例地址：[卡片展示企业](https://demo.succbi.com/v5/DEMO/app/ap.app/case/company-query/index.tpg?:id=%E5%8D%A1%E7%89%87%E5%B1%95%E7%A4%BA%E4%BC%81%E4%B8%9A)

### 跨源分组汇总查询{#cross-group-query}

在报表统计查询中，在一个分组浮动区域查询多个表指标时，会使用[一致性维度](./conformed-dimension.md)来发现关联关系并汇总查询结果。

比如分析服饰销售计划完成情况时，需要按照大区和价格档次分组统计查询`销售明细表`中的`实际销售数量`、`实际销售金额`以及`进销计划表`中的`计划销售数量`和`计划销售金额`，并汇总在一个报表中计算最终的完成率。

示例地址：[跨源分组统计报表](https://demo.succbi.com/v5/bi/%E8%B7%A8%E6%BA%90%E5%88%86%E7%BB%84%E6%8A%A5%E8%A1%A8)

### 主从表管理{#master-salve-mgr}

在低代码搭建的主从表数据管理中，系统会使用主从表关联关系来进行数据的插入、级联删除、级联更新。

比如在员工信息管理中，员工基本信息表是主表，员工教育经历表、员工职业经历表都是从表，主表与从表之间在模型上设置了[主从关系](#relation-types)，在员工信息维护的过程中会使用主从关系来进行数据的增删改处理，具体如下：

- 新增员工时会在一个页面同时新增员工基本信息和教育经历、职业经历信息，在提交数据时系统自动会把新增员工生成员工ID作为从表的外键自动提交到从表中，而不需要在从表中主动配置提交该字段。
- 少数情况需要修改主表的主键时，在更新数据交互上配置[级联更新策略](../../app/superpage/design/action/update-data.md)，具体可参考[级联更新DEMO](https://demo.succbi.com/v5/ap/update-data)
- 删除员工时，系统会自动级联删除从表中的数据，而不需要在删除交互中手动维护从表数据。(注：如果业务上是假删，需要在模型上配置[删除标记](./model-settings.md#deleteflagfield)字段，级联删除时系统也会自动根据模型的设置记录删除状态)

示例地址：[主从表管理](https://demo.succbi.com/v5/ap/%E4%B8%BB%E4%BB%8E%E8%A1%A8%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5)
