本文介绍了如何理解UML中类似于自反关联的&q;自反聚合&关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个类图是什么意思?反身关联的类图使用实线和箭头,但这里用一个空心菱形代替。这和递归有什么关系吗?此类图将生成什么?如果你能举个例子就最好了。此外,这种递归关系应该是一对多的,如果您存储数据库,如何建表。

推荐答案

它是什么意思?

此类关系图意味着Unit的一个实例可以Unit的其他几个实例相关联:

  • 空心聚合菱形只是一个modeling placebo&q;:它不会更改图表的含义,只是表示该关联表示某种分组。

  • A自反关联表示它将一个类与其自身相关联。与递归没有直接关系,如this SO answer explains

  • 不过,递归算法是探索此类关联的理想候选算法(例如,查找与特定实例间接相关的Unit的所有实例)。在数据库环境中,术语&Quot;递归关联&Quot;有时会用来代替&Quot;自反&Quot;,因为recursive joins是用来实现它们的。

请注意,1可能应该是0..1,因为1正好表示1,这意味着向上导航时会有无休止的循环。

看起来怎么样?

因为它是一对多关联,所以您可以将其可视化为一个树林:每个Unit实例可以是某些分支(无意义:最多有一个父级)

生成什么/如何实现?

让我们添加一些角色,以便更好地讲述聚合的目的:

代码生成将取决于工具和目标语言。但是具有聚合的模型和具有简单关联的模型很可能生成完全相同的代码,如下所示:

class Unit { // Java
    private String id;
    private Unit[] child; // java objects are sharable by default
    private Unit parent; // unless we make it non navigable in that direction
    ...
}

在RDBMS中,该表看起来非常相似。关系模型只允许使用一列进行双向链接:

ID (PK)  |  Parent (FK, nullable)
----------------------------------
w        |
u        |
u1       |  u
u2       |  u
u3       |  u
u21      |  u2
u31      |  u3
u32      |  u3
v        |
v2       |  v

Aself-join or a recursive CTE将允许使用自反关联查询数据。

这篇关于如何理解UML中类似于自反关联的&q;自反聚合&关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-18 06:35