自反关联和自连接的区别

RuYi 2020-5-2 15:23

1130.png

我看您书里面讲了自反关联,是不是对应于数据库的自连接?

UMLChina潘加宇

本来不应该回答这个不该成为问题的问题。因为你这样问表明不只是不了解自反关联,可能也对自连接有误解,应该再去学习和复习基本知识才对。不过,这个问题背后也反映了一些其他人也会有的概念混乱,顺便展开说一下。

先回答你的问题:自反关联(self-association)指一个类的不同实例之间存在静态关系,例如你给的图中,不同人员实例之间会有夫妻关系。映射到关系数据库可能会得到一张“夫妻关系”表,存放两个人员ID,也可能是人员表里加一个夫(妻)ID。

自连接(self join)指一个表和它自身做连接运算(动态)。以上图为例,可以通过自连接运算查找姓名相同的人员,from 人员 p1,人员 p2 where p1.姓名=p2.姓名。

展开说一下:关联是系统要记录的静态关系,即所谓“数据”,例如,张三和李四是夫妻,这个事实一直存在,你随便找个时间点问“张三和李四是夫妻吗”,得到的回答应该是肯定的,除非他俩离婚了。

这个就有别于张三在某个时间点调用了李四的“啪啪”服务,这是一个动态关系,持续时间很短(东哥120秒算长的了,重庆政富哥才12秒)。当然,如果这个啪啪的过程被拍了视频,这个视频是静态的,只要你不删,一直都存在。

很多同学搞不清楚,在类图上画一堆动态关系(A调用B……),这是不合适的,应该在序列图里画,类图上应该画的是泛化、关联。还有的同学,把一堆系统不需要记录的关系画成关联。

1131.png
weixinpanjiayu2