显示派生层次结构中的多对多关系 (Master Data Services)
适用于:SQL Server - 仅限 Windows Azure SQL 托管实例
派生层次结构 (DH) 不仅可显示一对多关系,现在还可以显示多对多关系。
多对多 (M2M) 关系
两个实体之间的多对多 (M2M) 关系可通过使用第三实体进行建模,第三实体用于在这两个实体之间提供映射:
在上面的示例中, Employee 和 TrainingClass 实体之间存在 M2M 关系,由映射实体 ClassRegistration提供。 一个员工可以在多个类中注册为学生,而每个类可以包含多个学生。
可以创建各种派生层次结构,例如,按班级显示学生、或反转关系并显示按学生班级分组等。
注意
SQL Server 2016 (13.x) 为 M2M 关系引入了派生层次结构。 此功能在该版本之前不可用。
首先,转到“派生层次结构”管理页并新建一个派生层次结构:
然后为新的派生层次结构添加级别(自下而上开始添加)。 在此示例中,我们想要显示按类分组的学生(员工)。 因此, Employee 实体将作为该层次结构中的叶级别并将作为第一个进行添加:
请注意,在上面的屏幕截图中, Employee 实体显示在“当前级别” 下方的中间位置,作为唯一级别。 右侧的派生层次结构“预览”只是显示了 Employee 实体的所有成员列表。 左侧的“可用级别”部分将显示除当前顶部级别 (Employee) 外可能会添加的级别。 大多数这些级别都是 Employee 实体上基于域的属性 (DBA),包括 Department DBA。
从 SQL Server 开始,便提供了一种可用于创建 M2M 关系模型的新级别类型,例如 Class(通过 ClassRegistration.Student 映射)。 级别名称比其他名称更为详细,用以反映明确描述映射关系所需的额外信息。 将此级别拖放到“当前级别”部分中的 Employee 级别 :
现在预览将显示按注册的定型类进行分组的员工。 由于这是一个 M2M 关系,因此每个子成员可以拥有多个父级。 在上面的示例中,员工 6 {Hillman,Reinout N} 在 1 {Master Data Services 101} 和 4 {Career-Limiting Moves}这两个类中注册为了学生。
此映射关系也可以反转显示,即按学生将类进行分组:
同样,我们会看到子级在多个父级下的显示方式:定型类 1 {Master Data Services 101} 同时显示在 6 {Hillman, Reinout N} 和 40 {Ford, Jeffrey L}下方。
映射实体 ClassRegistration 的成员未在派生层次结构内的任何位置显示。 它们只用于定义层次结构中父级和子级成员之间的关系。
可以通过修改映射实体成员来编辑 M2M 关系,具体做法是执行以下任一操作。 M2M 关系在“派生层次结构资源管理器”页为只读。
使用 Excel 中的 Master Data Services 外接程序或通过使用数据暂存修改“实体资源管理器”页上的映射实体成员。
拖放“派生层次结构资源管理器” 页中各父级之间的子节点。
此方法可修改现有的成员(如可能)并根据需要添加新成员。 将不会删除现有成员。
例如,使用 ClassRegistration 映射实体将一名学生移动到未使用的节点时,相应的映射实体成员的类属性值将更改为 null,但不会删除该成员。 相反,当将一名学生从未使用的节点移动到某个类时,如果存在对应于该学生的现有映射成员并且类为 null,则将通过将类从 null 更改为新父级来修改该成员。 如果找不到任何此类成员,则会添加一个。
例如,如果映射实体除了包含用于定义父-子关系的两个属性之外还包含其他属性,则此过程可避免删除成员,以防止意外删除其他用户数据。 用户必须直接在映射实体上显式执行删除操作。
新的 M2M 级别可以显示在允许基于域的属性 (DBA) 级别的派生层次结构中的任意位置。 如上述示例中一样,M2M 级别可以显示在顶部。 它还可以显示在 DBA 级别(包括递归级别)的上方和/或下方。 也可以显示在显式层次结构(已弃用)顶端级别下方。 多个 M2M 关系可以在同一个派生层次结构中链接在一起。
正如其他派生层次结构级别一样,也可以隐藏 M2M 级别。
示例模型中的 M2M 关系
有关 M2M 关系的演示,请查看 Master Data Services 附带的 Customer 示例模型中的 Region Climate 派生层次结构。
如下图中所示,对此关系进行建模的级别名称是 (通过 RegionClimate.Region 进行映射)。 预览版显示了按照与区域关联的气候类型分组的区域。 这是 M2M 关系,因为存在与多个气候(父级)关联的区域(子成员)。 例如,APCR {亚太} 与 A {热带} 和 B {干旱}相关联。
有关部署 Customer 示例模型以及 Master Data Services 附带的其他示例模型的说明,请参阅 部署示例模型和数据。
一对多关系
DH 的成员可以是许多子成员的父级,但它通常不能有多个父级(有关例外情况,请参阅 成员安全性)。 例如,假设有两个实体:Employee 和 Department,其中每个员工各属于一个部门。 这种关系可通过向 Employee 实体添加基于域的属性 (DBA) 进行建模,该属性可以引用 Department 实体:
这是一种一对多的关系,因为每个员工都只属于一个部门,但每个部门可以有多个员工。 可以创建派生层次结构,用于显示按部门分组的员工:
成员安全性
允许成员重复(允许成员具有多个父级)的层次结构不能用于分配成员安全权限。 例如:
不能定位 null 递归(递归级别的每个成员都显示在根及其递归父级下)的递归派生层次结构 (RDH)。
级别高于递归级别(递归级别的每个成员显示在其非递归父级及其递归父级下)的递归派生层次结构。
具有 M2M 级别(一个子级可以映射到多个父级)的派生层次结构。
集合
已弃用集合和显式层次结构。 转换存储过程 (udpConvertCollectionAndConsolidatedMembersToLeaf) 可将集合成员转换为叶成员,并创建多对多派生层次结构以捕获集合成员信息。