最大基数和最小基数有什么区别?

8

我很难理解在设计数据库时最大基数和最小基数之间的区别。

6个回答

9

记住,基数(cardinality)总是与另一件事物有关。

最大基数(Max Cardinality/Cardinality) 总是1或多个。类A与包B之间的关系具有基数为1,这意味着该包中最多只能有一个此类出现。相反,一个包的最大基数可以是N,这意味着可以有N个类。

最小基数(Min Cardinality/Optionality) 简单地意味着“必需的”。它总是0或1。0表示0个或更多,1表示1个或更多。

有很多好的文章解释了这一点,其中一些甚至解释了如何适当地"diagram"。您还可以搜索基数/可选性(OMG术语),它解释了同样的东西,可选性是“Min”,基数是“Max”。


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

问:我知道最大基数在创建数据表之间的关系时如何使用。但是,我不知道最小基数如何应用于数据库设计。我错过了什么吗?

答:你正确地注意到,最大基数比最小基数更重要。所有最小基数告诉你的是,为了使关系有意义,一个表必须具有的最小允许行数。例如,篮球团队必须至少有五名球员,否则它就不是篮球队。因此,球员一侧的最小基数为五,而团队一侧的最小基数为一。

可以争论一个人如果不在团队中就不能成为球员,因此TEAM的最小基数是强制性的。同样,除非组织至少有五名球员,否则它不能成为篮球队。PLAYERS的最小基数也是强制性的。也可以反过来争论。当球员退出团队时,直到招募到替代者之前,它是否停止成为团队?它不能参加任何比赛,但它是否停止成为团队?这是每个单独情况必须根据其自身情况评估的示例。在这种特定情况下,真相是什么?下次出现类似情况时,由于不同的情况,决策可能会有所不同。


3
同意其他回答,以下是稍微不同的观点。从“可选性”和“多样性”方面考虑。举个例子:PersonAddress
可选性问题:每个Person是否需要有一个Address?如果是,则关系是无条件的-这意味着最小基数为1。如果不是,则最小基数为0。
多样性问题:任何给定的Person是否可以拥有多个Address?如果不能,则最大基数为1。如果可以,则最大基数为>1。在大多数情况下,它是无限制的,通常用N*表示。
两者都很重要。非可选关联使代码更简单,因为在取消引用之前不需要测试存在性:例如:
a=person.address()

替代

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

地址是说明多重性(Multiplicity)的好例子。太多商业应用程序假设每个人只有一个地址,所以当人们拥有例如度假屋时就无法处理。

可以进一步限制基数,例如汽车发动机有2到12个气缸。但是这些限制通常不是非常稳定(Bugatti现在提供了一个16缸发动机)。因此,重要的问题是可选性和多重性。

希望对你有所帮助。


简洁明了的示例很容易打败理论和冗长文章,从而获得基本的掌握。 - Onewildgamer

0

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

最小基数:零或一

此链接描述了我的答案,为什么是这样的,它的表示方式以及它是什么。


0

我们来看一个例子 -

学生选修课程。在这里,学生课程都是实体。一个学校可能有或没有学生在某个学期注册。想象一下学校在夏季学期提供课程,但没有学生感兴趣加入。因此,学生的基数可以为(0,N)。但如果课程正在进行,就意味着它至少应该有1个学生注册。因此,它的基数应该是(1,N)。因此,您应该检查参与关系的实体是部分还是全部,这决定了其在关系中的基数。

希望这可以帮助你。


0
对于你的问题,“数据库设计中可选性的用途是什么?”:
在以下场景中,它变得非常有用。
当您设计具有1对1关系的2个表时,您将很难决定在哪个表中拥有外键。如果您在一个表中具有可选性1,而在另一个表中具有可选性0,则很容易决定。前者应该存在外键。它还有许多其他用途。
希望这可以帮助到你。

0

最大基数:
1对1,1对多,多对多,多对1

最小基数:
可选到必选,可选到可选,必选到可选,必选到必选


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