我的学校书Database Systems将基数定义如下:
关系的基数是它包含的元组数。相反,元组的数量被称为关系的基数,并且随着元组的添加或删除而改变。高基数 - 许多元组,低基数 - 少数元组。
虽然关于Cardinality (SQL statements)的维基百科文章将其定义如下:
基数是指数据库表的特定列(属性)中包含的数据值的唯一性。基数越低,列中重复的元素越多。基数有3种类型:高基数,正常基数和低基数。
它们可能都是正确的,但我无法将这两个定义作为相关定义连接起来。重新措辞会受到重视!
答案 0 :(得分:11)
他们说的是同一件事,它与元组(relational algebra
)或行(外行人的术语)有关。
如果说高基数是特定属性(或字段)的可能值,这些值是唯一的,因此行或元组的数量更高:
示例强>:
StudentID Lastname Firstname Gender
101 Smith John M
102 Jones James M
103 Mayo Ann F
104 Jones George M
105 Smith Suse F
就 StudentID 而言,cardinality
为high
,因为它是唯一的。在这里它有五(5)个元组/行。
另一方面,姓氏具有正常的基数,特别是只有三(3)个唯一元组/行。因此它有normal cardinality
。
最后性别只有两个可能的唯一元组Low Cardinality
。
您可能会将此处的Cardinality
与Degree
的关系混淆,该关系与关系(或表格)中attributes/fields
的数量有关。
另一方面,Database
的{{1}}教科书通常与另一实体相关的实体有关,也就是参与实体的可能关系的数量。给定的关系类型。因此,例如Cardinality
binary relationship
可以是cardinality
,one-to-one
或one-to-many
。
答案 1 :(得分:5)
这两个定义都试图说基数是“行数”。区别在于比较是“在表中”还是“在特定列中”。
数据库教科书中的版本侧重于关系代数和表格结构(该术语中的“关系”)。
维基百科条目更实用。它包含教科书定义,假设表具有主键(主键的基数与表相同)。但是,它也可以应用于标志列。如果该标记仅采用两个值(0
与1
),那么我们可以说该列的基数为2。
这对优化查询很重要。基数是选择加入,聚合和选择数据的最佳方法的一个组成部分。实际上,大多数数据库使用的信息多于基数,所谓的“统计”关于列及其优化值。
答案 2 :(得分:0)
如果我们有表A和B,请将基数视为表B中与表A中的行相关的行数。如果表是PERSON和VEHICLE,并且关系是RODE_ON则基数为因为大多数人过去骑过很多不同的车辆,而且大多数车辆都开着很多人。如果关系是OWNS那么基数很低 - 大多数人拥有一辆车,有些人拥有车辆,车辆通常有一两个车主,而不是更多。
请注意,关系一侧的基数不等于另一侧的基数。如果表是PERSON和FINGER,并且关系是BELONG TO,那么一个人有很多手指,但每个手指只属于一个人。
答案 3 :(得分:0)
有两个概念
我认为这是指索引基数,这是非常不同的 https://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal/
这里是另一个例子, https://en.wikipedia.org/wiki/Cardinality_(SQL_statements)
我认为基数一词只关注表之间的关系 特别是,它不是用来讨论单个表或数据唯一性的术语
IBM文档(如果您搜索“独特”一词,则不会提及) https://www.ibm.com/support/knowledgecenter/en/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.ug_cog_rlp.10.2.2.doc/c_cog_rlp_rel_cardinality.html 解释基数时,必须考虑关系两端显示的符号。可能的结束标签显示在以下列表中:
在数学中,集合的基数是“集合中元素数量”的度量。 (没有提及独特的顺便说一句) https://en.wikipedia.org/wiki/Cardinality
在数据库设计中,一个数据方面相对于另一个方面的基数或基本原理是一项关键功能。彼此之间的关系必须彼此精确且精确,以解释每个方面如何链接在一起。 在关系模型中,表可以与“一对多”,“多对多”,“一对零或一个”等中的任何一个相关联。这被称为给定的表相对于另一个表。 https://en.wikipedia.org/wiki/Cardinality_(data_modeling)