Max Cardinality和Min Cardinality有什么区别?

时间:2011-02-24 12:00:10

标签: database data-modeling cardinality

我很难理解在设计数据库时Max和Min基数之间的区别是什么。

6 个答案:

答案 0 :(得分:7)

记住基数总是与另一件事有关系。

最大基数(基数) 总是1或许多。 A类与包B的关系,基数为1,这意味着包中最多可以有一个此类的出现。相反的可能是一个包的最大心率为N,这意味着可以有N个类

最小基数(可选性) 简单地说就是“必需”。它总是0或1.0表示0或更多,1或更多

有很多好文章可以解释这一点,包括一些解释如何平均财产"diagram"的文章。您可以搜索的另一件事是Cardinality / Optionality(OMG Terms),它解释了同样的事情,Optionality是“Min”Cardinality是“Max”,


来自http://www.databasecentral.info/FAQ.htm

  

问:我可以看到在创建数据表之间的关系时如何使用最大基数。但是,我没有看到最小基数适用于数据库设计。我错过了什么?

     

答:你注意到最大基数是一种比最小基数更重要的关系特征是正确的。所有最小基数告诉您表是必须具有的最小行数,以使关系有意义。例如,篮球队必须至少有五名球员,或者不是篮球队。因此,PLAYER侧的最小基数为5,TEAM侧的最小基数为1。

     

有人可以争辩说,除非她在团队中,否则一个人不能成为一名球员,因此TEAM的最低基数是强制性的。同样,组织不能成为篮球队,除非它至少有五名球员。 PLAYERS的最低基数也是强制性的。人们也可能在相反的方向争论。当一名球员退出球队时,在招募替补球员之前,它是否会不再是一支球队?它不能参与任何游戏,但它不再是一个团队吗?这是一个事实的例子,每个人的情况都必须按照自己的条件进行评估。这个特定情况下的真相是什么?下次出现类似情况时,由于情况不同,决定可能会有所不同。

答案 1 :(得分:3)

同意其他答案,这里的观点略有不同。考虑可选性多样性。举个例子:PersonAddress

选项性问:每个Person是否需要Address?如果是这样,则该关系是无条件的 - 这意味着最小基数为1.如果不是,则最小基数为0.

多重性问:任何给定的Person都可以有多个Address吗?如果不是,则最大基数为1.如果是,则最大基数为> 1。在大多数情况下,它是无界的,通常表示为N*

两者都很重要。非可选关联使得代码更简单,因为在解除引用之前不需要测试存在:例如

a=person.address()

而不是

if (person.address !=null) {
  a=person.address()
}

地址是Multiplicity重要性的一个很好的例子。太多的商业应用程序假设每个人只有一个地址 - 因此当人们有例如地址时无法应对。度假屋。

可以进一步约束基数,例如汽车发动机有2到12个气缸。然而,这些限制通常不是很稳定(布加迪现在提供16缸发动机)。所以重要的问题是选择性和多样性。

第h

答案 2 :(得分:0)

让我们使用一个例子 -

Students需要Class。这里StudentsClass都是实体。学校可能有也可能没有学生在特定学期注册。想想一所学校在夏季学期开设课程,但没有学生有兴趣加入。所以,学生的基数可以是(0,N)。但如果Class正在进行,则应至少有1名学生注册。因此,它的基数应该是(1,N)。因此,您应该检查参与该关系的实体是部分还是总计,这决定了它在关系中的基数。

希望它有所帮助。

答案 3 :(得分:0)

最高基数:
1比1,1比1,多对多,多对1

最低基数:
强制可选,可选可选,强制可选,强制强制

答案 4 :(得分:0)

对于您的问题,“数据库设计中选项的用途是什么?”:  它在以下场景中变得非常有用。

当您设计2个具有1对1关系的表时,您将很难确定具有外键的位置(在哪个表中)。如果你有一个表的可选性1而另一个表有0,那么很容易做出决定。外键应该存在于前者中。它还有许多其他用途。

希望它有所帮助。

答案 5 :(得分:0)

最大基数: - 一,一,多,

最低基数: - 零或一

This link描述了我的答案,为什么会这样,代表什么, 它是什么。