gpt4 book ai didi

database - UML中类似自反关联的 "reflexive aggregation"关系如何理解

转载 作者:行者123 更新时间:2023-12-05 04:40:20 25 4
gpt4 key购买 nike

这个类图是什么意思?自反关联的类图使用了实线和箭头,但这里换成了空心的菱形。它与递归有什么关系吗?这个类图会生成什么?如果能举个例子最好。另外这个递归关系应该是一对多的,存数据库怎么建表。

最佳答案

这是什么意思?

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

  • 空心的聚合菱形只是一个“modeling placebo”:它不改变图的意思,只是暗示关联代表某种分组。

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

  • 不过,递归 算法是探索此类关联的良好候选者(例如,找到间接相关的 Unit 的所有实例到特定实例)。在数据库环境中,有时使用术语“递归关联”而不是“自反”,因为 recursive joins用于实现它们。

请注意,1 可能应该是 0..1,因为 1 正好表示 1,这意味着向上导航时会出现无限循环.

它看起来怎么样?

由于它是一对多的关联,您可以将其想象成一片树林:每个 Unit 实例都可以是一些分支的起点 ,并且几棵树可能共享公共(public)分支 (废话:最多只有一个父分支)

enter image description here

生成了什么/如何实现?

让我们添加一些角色来更好地谈论聚合的末端: enter image description here

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

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

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

关于database - UML中类似自反关联的 "reflexive aggregation"关系如何理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70313142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com