Multiplicity与Cardinality的区别

47

在谈论数据模型和数据库时,术语基数(Cardinality)通常用来描述给定集合中允许的元素数量。

UML通常将相同的属性称为多重性(Multiplicity)

这两个术语之间是否有区别或者它们是同义词?

7个回答

37

最简单的解释是:

多重性 = 基数 + 参与度

基数:表示某个实体能够参与的最大关系数量(简单地说:至多)。

参与度:表示所有实体出现是否都参与了关系(简单地说:至少)。

例如:enter image description here


请注意,此表示法适用于UML。对于像Sql关系表示法,我们将多重性元组放置在箭头开头。 - agenis
1
@agenis,您所提到的是实体关系模型,它与面向对象模型不同。 - Pablo Pazos
2
根据我的理解,在其他视觉图表方法中,多重性也被放置在关联的末尾(相对于导航方向)。维基百科有一张很好的图片,比较了各种符号表示法。 - Bart Hofland

30
马丁·福勒在他的网站上谈到了这个主题。引用:
当数据建模方法谈论关系时,它们使用基数这个术语来指示可以链接多少个实体。因此,您可能会在订单和客户之间建立关系,并说关系的基数是一对多。或者您可能会听到,订单的客户的基数为0到多个。
UML避免使用基数这个术语,而更喜欢使用多重性。通常,具有数据建模背景的人对此感到惊讶,因为基数在数据建模圈子里被广泛使用。
更改的原因是基数的字典定义是“特定集合或其他分组中元素的数量”(OED)。根据这个定义,数据建模的用法实际上是错误的。在优秀的UML参考手册中,Rumbaugh将多重性定义为“可允许的基数值范围-集合可以承担的大小的规范”。 UML在各个地方使用多重性,用于属性(关联或属性)以及显示复合结构中部件的多重性。它被正式定义为下限和上限。关联(在数据建模圈子中相当于关系的UML等效项)每个方向都有一个多重性。

来源


1
Fowler 可能在谈论旧的 UML 版本。UML 2.5 第33页已经很好地解释了这个术语。 - qwerty_so

26

简而言之:一个 多重性 由下限和上限的 基数 组成。 基数是集合中元素的数量。 因此,多重性告诉您集合中允许的最小和最大成员数量。它们不是同义词。


7

感谢您提出以上问题和答案。

今天早上因这些术语而感到困惑(喝咖啡也没用)。

给定以下示例:

0-1 ---------- 1-*

多重性:

第一个多重性,适用于左侧实体:0-1

第二个多重性,适用于右侧实体:1-*

第一个多重性的基数:

下限基数:0

上限基数:1

第二个多重性的基数:

下限基数:1

上限基数:*


1
为了添加最新的UML 2.5定义,位于第33页:
集合的基数是该集合中包含的值的数量。MultiplicityElement的多重性指定了它所代表的集合的有效基数。多重性是对基数的约束,不得小于下限并且不得大于多重性所指定的上限(除非多重性是无限的,在这种情况下,对上限没有约束)。

1

Multiplicity 是关联对象集合的约束条件,而 Cardinality 是集合中对象的计数。

实际上,多重性是对基数的约束。


0

一个事件的多重性 = 元素的参与度 + 元素的基数。 参与度指的是实体在特定关系中出现的最少次数,而基数则表示特定实体在关系中出现的最大(上限)和最小(下限)次数。

附注:https://www.uml-diagrams.org/multiplicity.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接