表关系
表关系定义列如何在数据库中相互关联。 最简单的情况是,向表中添加查找列将在两个表之间形成一个新的 1:N(一对多)关系,并使您能够将该查找列放在窗体中。 利用查找列,用户可以将该表的多个子行与单个父表行关联。
除了简单地定义行如何相互关联以外,1:N 表关系还提供可解决以下问题的数据:
- 在删除某个行时,是否还应删除与该行相关的所有行?
- 分配行时,是否还需将与该行相关的所有行分配给新负责人?
- 在某个现有行的上下亠中创建新的相关行时,如何简化数据录入流程?
- 查看某个行的用户如何才能查看关联的行?
表还可以参与 N:N(多对多)关系,其中两个表的任意数量的行都可以彼此关联。
决定是使用表关系还是连接
表关系是对数据库进行更改的元数据。 这些查询关系允许查询以便高效地检索相关数据。 使用表关系可以定义能定义表或者大多数行可以使用的正式关系。 例如,没有潜在客户的商机不是非常有用。 “商机”表还与“竞争对手”表有 N:N 关系。 此使得可以将多个竞争添加到商机中。 您可能需要获取此数据,并创建显示竞争对手的报表。
在称为连接的行之间还存在其他不太正式的各种关系。 例如,了解两个联系人是否结婚,是工作外的朋友关系,或者是为另一个客户工作的联系人,可能会很有用。 大多数企业不会使用这种信息生成报表,或者要求输入此类信息,因此可能不值得创建表关系。 详细信息:配置连接角色
表关系类型
在查看解决方案资源管理器时,可能会想到有三种类型的表关系。 实际上,只有下表中所示的两种关系。
关系类型 | 描述 |
---|---|
1:N(一对多) | 一种表关系,由于相关表上的查找列,主表的一个表行可以与其他很多相关表行关联。 在查看主表行时,可以看到与其关联的相关表行的列表。 在 Power Apps 门户中,当前表代表主表。 |
N:N(多对多) | 依赖于特殊关系表(有时称为相交表)的表关系,使一个表的多个行可以与另一个表的多个行关联。 在查看 N:N 关系中的任一表的行时,可以看到与其相关的另一个表的所有行的列表。 |
N:1(多对一) 关系类型存在于用户界面中,因为设计器会显示按表分组的视图。 1:N 关系实际上存在于表之间,并将每个表称为主/当前表或相关表。 相关表(有时称为子表)有一个查找列,可用于存储对主表(有时称为父表)中的行的引用。 N:1 关系只是从相关表角度来看的 1:N 关系。
表关系行为
相关表的行为非常重要,因为它有助于确保数据完整性,并可以让您公司的业务流程实现自动化。
保持数据完整性
某些表的用途是为其他表提供支持。 这些实体对自身无用。 它们通常有一个链接到所支持主表的必需的查找列。 当主行删除时,会发生什么情况?
可使用关系行为根据业务的规则定义对相关行的影响。 详细信息:添加高级关系行为
自动化业务流程
假定您有一位新销售员,您希望向其分派一些当前分派给另一位销售员的现有客户。 每个客户行可能有一些与其关联的任务活动。 您可以轻松地找到要重新分派的可用客户,并将其分派给新销售员。 但是,对于与这些客户关联的任何任务活动,会发生什么情况? 您是否打开每项任务,并决定是否也应将其分派给新销售员? 可能不需要。 您可以让关系自动应用一些标准规则。 这些规则只适用于与您要重新分配的客户关联的任务行。 您的选择是:
- 重新分派所有可用任务。
- 重新分派所有任务。
- 不重新分派任务。
- 重新分派当前分派给前一个客户负责人的所有任务。
关系可以控制对主要表行的行执行的操作如何向下级联到所有相关表行。
行为
在进行某些操作时,有多个行为类型可以应用。
行为 | 描述 |
---|---|
可用项的级联 | 对所有可用的相关表行执行操作。 |
全部级联 | 对所有相关表行执行操作。 |
无级联 | 不执行任何操作。 |
移除链接 | 删除所有相关行的查找值。 |
限制 | 当存在相关表行时,阻止删除主表行。 |
用户负责项的级联 | 对作为主表行由相同用户负责的所有相关表行执行操作。 |
操作
下面是可以触发特定行为的操作:
Column | 描述 | 选项 |
---|---|---|
分派 | 当主表行分配给其他人时,会发生什么情况? | 全部级联 级联活动 用户负责项的级联 无级联 |
重定父级 | 在父关系中的相关表的查找值发生更改时,会发生什么情况? 详细信息:父表关系 |
全部级联 级联活动 用户负责项的级联 无级联 |
共享 | 当主表行共享时,会发生什么情况? | 全部级联 级联活动 用户负责项的级联 无级联 |
删除 | 当主表行删除时,会发生什么情况? | 全部级联 取消文章链接 限制 |
取消共享 | 当主表行取消共享时,会发生什么情况? | 全部级联 级联活动 用户负责项的级联 无级联 |
合并 | 当主表行合并时,会发生什么情况? | 全部级联 无级联 |
汇总视图 | 与此关系关联的汇总视图的预期行为是什么? | 全部级联 可用项的级联 用户负责项的级联 无级联 |
备注
在下列情况下,将不会执行分配、删除、合并和重定父级操作:
- 如果原始父行和请求的操作包含相同的值。 示例:尝试触发分配并选择已作为行负责人的联系人
- 尝试对已运行级联操作的父行执行操作
备注
执行分配时,重新分配发生时,行上当前活动的所有工作流或业务规则将自动停用。 如果需要继续使用工作流或业务规则,新的行负责人需要将其重新激活。
父表关系
可以具有 1:N 关系的每对表之间可以具有多个 1:N 关系。 但通常只能将其中一个关系视为父表关系。
父表关系是下表的父列中的级联选项之一为 true 的任何 1:N 表关系。
目的 | 父 | 非父 |
---|---|---|
分派 | 全部级联 用户负责项的级联 可用项的级联 |
无级联 |
删除 | 全部级联 | 移除链接 限制 |
重定父级 | 全部级联 用户负责项的级联 可用项的级联 |
无级联 |
共享 | 全部级联 用户负责项的级联 可用项的级联 |
无级联 |
取消共享 | 全部级联 用户负责项的级联 级联活动 |
无级联 |
例如,如果您新建一个自定义表并添加与客户表的 1:N 表关系(其中自定义表是相关表),则可以将该表关系的操作配置为使用父列中的选项。 如果您后来添加了自定义表作为引用表的另一个 1:N 表关系,则只能将操作配置为使用非父列中的选项。
通常这意味着,对于每个表对,只有一个父关系。 有些情况下,相关表上的查找可能允许与多种类型的表之间的关系。
例如,如果表具有可以引用联系人或客户表的“客户”查找。 有两个单独的父 1:N 表关系。
对于可使用相关项查找列进行关联的表,任何活动表都具有一组类似的父表关系。
对可以设置的行为的限制
由于存在父关系,在定义表关系时,应当记住一些限制。
- 在与级联的相关系统表的关系中,自定义表不能为主表。 这表示在主自定义表和相关系统表间不能与设置为全部级联、可用项的级联或用户负责项的级联的任何操作具有关系。
- 如果新关系中的相关表已作为其他关系(该其他关系具有设置为全部级联、可用项的级联或用户负责项的级联的任意操作)中的相关表而存在,则任何新关系都不能具有设置为全部级联、可用项的级联或用户负责项的级联的任意操作。 这将防止创建具有多个父级的关系。
清除继承的访问权限
当您要跨相关表提供对行的访问权限时,使用重定父级和共享级联行为会很有用。 但是,需要更改级联行为设置的流程或设计中可能会进行更改。
当表关系使用重定父级或共享,并且级联行为更改为无级联时,该表关系将阻止任何新的权限更改级联到相关的子表。 此外,还必须撤消级联行为处于活动状态时授予的继承权限。
继承访问权限清除是系统作业,用于清除在级联行为更改为无级联之后仍然保留的旧继承访问权限。 此清理不会影响直接被授予对表的访问权限的任何用户,但是会删除仅通过继承获得访问权限的任何用户的访问权限。
下面是继承访问权限清除的工作原理:
- 识别和收集与更新后的父级具有级联关系的所有表。
- 识别和收集通过继承访问权限被授予对相关表的访问权限的用户。
- 检查被授予对相关表的直接访问权限的用户,然后将其从集合中删除。
- 删除收集的表上收集的用户的继承访问权限。
清理运行后,由于级联功能只能够访问相关表的用户不再能够访问行,以确保更高的安全性。 有些情况下,清理可能不会成功。 了解有关如何清理继承访问的更多信息