在尝试设计数据库时,我很难理解 Max 和 Min 基数之间的区别。
6 回答
请记住,基数始终是与另一件事的关系。
最大基数(Cardinality) 始终为 1 或多个。类 A 与包 B 的关系基数为 1,这意味着该类最多可以在包中出现一次。相反的可能是一个包的最大基数为 N,这意味着可以有 N 个类
Min Cardinality(Optionality) 简单的意思是“必需的”。它总是 0 或 1。0 表示 0 或更多,1 或更多
有很多很好的文章可以解释这一点,包括一些解释如何绘制属性“图表”的文章。您可以搜索的另一件事是基数/可选性(OMG 术语),它解释了同样的事情,可选性是“最小”基数是“最大”,
来自http://www.databasecentral.info/FAQ.htm
问:我可以看到在创建数据表之间的关系时如何使用最大基数。但是,我看不到最小基数如何应用于数据库设计。我错过了什么?
答:您注意到最大基数是关系的一个比最小基数更重要的特征是正确的。所有最小基数都告诉您,为了使关系有意义,表必须具有的最小允许行数。例如,一个篮球队必须至少有五名球员,否则就不是篮球队。因此,PLAYER 端的最小基数为 5,TEAM 端的最小基数为 1。
有人可以争辩说,除非她在一个团队中,否则一个人不能成为一名球员,因此 TEAM 的最小基数是强制性的。同样,一个组织不能成为篮球队,除非它至少有五名球员。PLAYERS 的最小基数也是强制性的。人们也可以朝相反的方向争论。当一名球员退出球队时,在招募替补球员之前,球队就不再是球队了吗?它不能参加任何比赛,但它不再是一个团队了吗?这是一个事实的例子,每个单独的情况都必须根据自己的条件进行评估。在这个特定的例子中,真相是什么?下次出现类似情况时,由于情况不同,决定可能会有所不同。
同意其他答案,这里的观点略有不同。考虑可选性和多样性。举个例子:Person
有Address
。
可选性问:是否每个人都Person
需要一个Address
?如果是,则关系是无条件的 - 这意味着最小基数为 1。如果不是,则最小基数为 0。
多重性问:任何给定Person
的可以有多个Address
吗?如果不是,则最大基数为 1。如果是,则最大基数 >1。在大多数情况下,它是无界的,通常表示为N
或*
。
两者都很重要。非可选关联使代码更简单,因为在取消引用之前无需测试是否存在:例如
a=person.address()
代替
if (person.address !=null) {
a=person.address()
}
地址是为什么多重性很重要的一个很好的例子。太多的业务应用程序假设每个人都只有一个地址 - 因此无法应对人们拥有度假屋等情况。
可以进一步限制基数,例如汽车发动机有 2 到 12 个气缸。然而,这些限制通常不是很稳定(布加迪现在提供 16 缸发动机)。所以重要的问题是可选性和多样性。
hth。
最大基数:
1 对 1、1 对多、多对多、多对 1
最小基数:
可选到强制、可选到可选、强制到可选、强制到强制
让我们举个例子 -
Students
需要Class
. 这里两者Students
都是Class
实体。学校可能有也可能没有学生在特定学期注册。想象一所学校在夏季学期开设课程但没有学生有兴趣加入。因此,学生的基数可以是(0,N)。但如果 aClass
正在进行意味着,它应该至少有 1 名学生注册。所以,它的基数应该是(1,N)。因此,您应该检查参与关系的实体是partial还是total,这决定了它在关系中的基数。
希望能帮助到你。
对于您的问题,“数据库设计中可选性的用途是什么?”:它在以下场景中变得非常有用。
当您设计 2 个具有 1 对 1 关系的表时,您将困惑于决定在哪里(在哪个表中)拥有外键。如果您有一个表的可选性 1 和另一个表的可选性 0,那么很容易决定它。外键应该存在于前者中。它还有许多其他用途。
希望能帮助到你。