数据库中的基数是什么?

109

能否有人通过举例子来解释一下数据库中的基数是什么意思?

6个回答

164
在数据建模和数据库查询优化两个不同的上下文中,一个令人困惑的地方可能是使用了同一个词语。
在数据建模术语中,基数表示一张表与另一张表之间的关系:
1-1(表A中的一行对应表B中的一行)
1-Many(表A中的一行对应表B中的多行)
Many-Many(表A中的多行对应表B中的多行)
此外,还有以上述关系的可选参与条件(其中一张表中的一行不必与另一张表有任何关系)。
请参阅维基百科上的Cardinality (data modelling)
当谈到数据库查询优化时,基数是指表中某一列的数据,具体来说是其中有多少个唯一值。这个统计数据有助于规划查询和优化执行计划。
请参见维基百科关于Cardinality (SQL statements)的内容。

3
基数为零是否意味着这两个表格之间没有关系? - Tyler
零的基数?这个术语并不常用,但我想它应该是这个意思。通常,在ER图中不会有连接这些表的线条,因此不需要指示基数。 - Oded
数据建模中的零基数用于表示可选关系。例如0..1或0..n。 - Walter Mitty
将数学术语基数的类比应用于数据建模中,两个表之间的基数是指这两个表之间值的唯一性(作为两个集合之间的函数)。在数据库查询优化中,一个表的基数是指该列中行的唯一性程度(即集合本身的基数)。 - gawkface

36

这有点取决于上下文。Cardinality的意思是某物的数量,但它在各种情境下都被使用。

  • 当您构建数据模型时,cardinality通常指与表B相关联的表A中的行数。也就是说,对于表A中的每一行,是否有1个B中的行(1:1),对于表A中的每一行是否有N个B中的行(1:N),对于表A中的每N行是否有M个B中的行(N:M)等。
  • 当您查看是否更有效地使用b * -tree索引还是位图索引或如何选择谓词时,cardinality指的是特定列中不同值的数量。例如,如果您有一个PERSON表,则GENDER可能是一个非常低的cardinality列(GENDER中可能只有两个值),而PERSON_ID可能是一个非常高的cardinality列(每行将具有不同的值)。
  • 当您查看查询计划时,cardinality指的是预计从特定操作返回的行数。

可能还有其他情况,人们在不同的上下文中谈论cardinality,并且意思是其他事情。


11
在数据库中,基数是表中行的数量。

输入图片描述 图像来源


enter image description here img source


  • 关系通过它们的基数(即集合元素的数量)进行命名和分类。
  • 离实体最近的符号是最大基数,另一个是最小基数
  • 实体关系将关系线的末端显示如下:
    enter image description here

enter image description here

图片 来源


1
请使用文本而非图片/链接(包括表格和ERD)来表达内容。可以进行改述或引用其他文本,只提供与问题相关的信息。仅在无法用文字表达或需要补充文字时使用图片。图片无法被搜索或复制粘贴。 - philipxy

8

基数是指列中包含数据的唯一性。如果列中有很多重复的数据(例如存储“true”或“false”的列),则其基数较低,但如果值非常唯一(例如社会保障号码),则其基数较高。


2
基数可以指几件不同的事情,但是Oded的回答很可能是你要找的。 - Andrew

-2

定义: 我们在数据库中有表格。在关系型数据库中,表格之间存在关联关系。这些关系可以是一对一、一对多或多对多。这些关系被称为“基数”。

基数的重要性:

许多关系型数据库都是根据严格的业务规则设计的。当您设计数据库时,我们根据业务规则定义基数。但是每个对象也有其自身的特性。

当您定义对象之间的基数时,必须考虑所有这些因素以定义正确的基数。


-2
集合的基数是集合中元素的数量。 我们有一个集合 a > a,b,c <,所以这个集合包含3个元素。 3就是该集合的基数。

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