简介
在 Microsoft Dataverse 中为数据建模时,使用单独的表来表示不同的对象和概念。 组织可以使用更多表来帮助保护特定信息、避免数据重复、描述其他属性或简化报告流程。 实际对象彼此相关,因此在 Dataverse 中使用关系将一个表的行关联到另一个表。 此外,对记录执行操作时,关系可以提供适用的约束和行为。
简单来说,Dataverse 表和关系可以共同描述数据。 使用表和关系在 Microsoft Power Apps 的画布应用中构建良好的用户体验时,您希望隐藏数据模型中不必要的复杂部分。 为完成本任务,您的公式和数据使用必须使用关系有效地导航表。 本模块将阐述如何使用 Dataverse 提供的不同类型的关系。
应用场景:Contoso 共享工作区
本模块将使用公共业务应用场景来演示 Dataverse 关系与画布应用一起使用的情况。 Contoso 与许多公司一样,具有多个位置,并且允许员工在家工作。 员工偶尔需要进入办公室,需要在访问期间使用办公桌。 此前,Contoso 指示员工在到达办公室后自行寻找空余的办公桌。 随后公司发现此类共享工作区系统(有时也称为办公桌轮用)给 IT 支持和许可带来了挑战。 因此,公司计划构建一个解决方案,使员工可以通过该解决方案查看可用的办公桌并提前预留。 负责构建解决方案的团队已确定下表作为 Dataverse 数据模型的一部分。
表名 | 描述 |
---|---|
位置 | 该表将代表各个建筑物,并且将包含以下列,例如地址和电话号码。 每个位置将有一个主要联系人。 |
办公桌 | 该表表示可供预留的实际办公桌。 办公桌位于特定位置。 |
办公桌功能 | 不同的办公桌具有不同的功能。 例如,有些办公桌可能具有扬声器,有些办公桌可能单独位于一个房间中。 它将包括一个标准的办公桌功能列表,并且每个办公桌都可以具有其中一个或多个功能。 |
用户 | 用户表示可以预留办公桌或充当位置的主要联系人的人员。 |
预留 | 该表表示人员预留在特定时间段使用特定位置的特定办公桌。 |
Dataverse 关系类型
在表之间创建关系时,关系类型将定义关系的每一方的基本约束。 Dataverse 支持一对多和多对多关系。
一对多关系
一对多关系(也称为 1:N 或父子关系)包括一个主(父)表,您可以通过在相关(子)表上使用查找列来将单行与多个相关(子)表行关联。 主行称为父行,相关表行称为子行。 一个子行只能与一个父行关联。
一对多关系也称为多对一(或 N:1)关系,从指向父行的子行开始使用该关系。 这是相同的物理关系定义,只是角度不同而已。 在画布应用中,如果您正在处理子记录并想要显示父记录中的属性,则您将使用子行上的多对一关系导航属性。
默认情况下,单个表用作主表,查找列始终指向该表中的一行。 Dataverse 还支持多表查找(有时称为多态查找),这允许查找字段指向多个表中的一个表中的一行,从而更加灵活地处理更复杂的数据模型。 例如,您可以通过创建数据类型“客户”列来设置多表查找列。 然后,您可以将客户查找值设置为指向联系人或单位表行。 在所有活动表(例如电子邮件、任务等)上,相应的列可以指向为活动跟踪启用的任何表。 此外,您可以使用多表查找列类型设置自定义多表查找列。 在 Power Apps 中使用这些多表查找列时,您将使用 IsType 和 AsType Microsoft Power Fx 函数来确定父表并使用数据。
在本模块的示例数据模型中,已定义以下一对多关系以支持该应用场景。
主表 | 相关表 | 描述 |
---|---|---|
位置 | 办公桌 | 每个办公桌都有一个位置。 |
用户 | 位置 | 每个位置都有一个主要联系人。 |
用户 | 预留 | 要使用预留办公桌的用户。 |
办公桌 | 预留 | 每个预留都适用于一张特定的办公桌。 |
设置一对多关系时,还可以设置关系行为。 行为决定了在删除、分配、共享、取消共享主表行或重定父级时应发生什么情况。 默认的行为是引用,设置为在删除主表行时删除两个表之间的关联。 例如,“位置”表具有多个办公桌并使用默认配置,因此,如果您的画布应用删除了一个位置行,则默认情况下,所有关联的办公桌都将孤立。 如果业务要求是在删除位置时删除关联的办公桌记录,则您可以选择 ForAll 函数,该函数将首先删除所有关联的办公桌记录。 更好的选项是为关系设置父级行为类型。 根据该行为类型,删除主记录时,将自动删除关联的记录。 此方法可确保不会出现孤立的办公桌记录。
当您生成画布应用并使用相关表时,了解为该关系设置的行为将确保您实施正确的逻辑。
多对多关系
多对多关系(也称为 N:N)包含一个称为关系表的特殊隐藏表,有时称为相交表。 该表将映射一个表的多行可以如何与另一个表的多行相关联。 多对多关系可以跟踪关联,但您无法修改相交表以添加自定义列来描述关系。
在本模块的示例中,办公桌和办公桌功能将具有多对多关系。 所有办公桌都将共享办公桌功能列表,并且每个办公桌可以具有一个或多个关联的功能。 通过多对多关系,用户可以知道该办公桌配有椅子,但不会让您存储每个办公桌配有多少把椅子。
以下视频展示了如何在表之间创建关系。
创建所有表和关系后,示例应用场景的数据模型应与下图相似。
本模块的其余部分将探讨如何使用画布应用处理本数据模型。