SQL中基数的定义是什么?

时间:2014-08-28 11:47:08

标签: mysql sql statements cardinality

我的学校书Database Systems将基数定义如下:

  

关系的基数是它包含的元组数。相反,元组的数量被称为关系的基数,并且随着元组的添加或删除而改变。高基数 - 许多元组,低基数 - 少数元组。

虽然关于Cardinality (SQL statements)的维基百科文章将其定义如下:

  

基数是指数据库表的特定列(属性)中包含的数据值的唯一性。基数越低,列中重复的元素越多。基数有3种类型:高基数,正常基数和低基数。

它们可能都是正确的,但我无法将这两个定义作为相关定义连接起来。重新措辞会受到重视!

4 个答案:

答案 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 而言,cardinalityhigh,因为它是唯一的。在这里它有五(5)个元组/行。

另一方面,姓氏具有正常的基数,特别是只有三(3)个唯一元组/行。因此它有normal cardinality

最后性别只有两个可能的唯一元组Low Cardinality

您可能会将此处的CardinalityDegree的关系混淆,该关系与关系(或表格)中attributes/fields的数量有关。

另一方面,Database的{​​{1}}教科书通常与另一实体相关的实体有关,也就是参与实体的可能关系的数量。给定的关系类型。因此,例如Cardinality binary relationship可以是cardinalityone-to-oneone-to-many

答案 1 :(得分:5)

这两个定义都试图说基数是“行数”。区别在于比较是“在表中”还是“在特定列中”。

数据库教科书中的版本侧重于关系代数和表格结构(该术语中的“关系”)。

维基百科条目更实用。它包含教科书定义,假设表具有主键(主键的基数与表相同)。但是,它也可以应用于标志列。如果该标记仅采用两个值(01),那么我们可以说该列的基数为2。

这对优化查询很重要。基数是选择加入,聚合和选择数据的最佳方法的一个组成部分。实际上,大多数数据库使用的信息多于基数,所谓的“统计”关于列及其优化值。

答案 2 :(得分:0)

如果我们有表A和B,请将基数视为表B中与表A中的行相关的行数。如果表是PERSON和VEHICLE,并且关系是RODE_ON则基数为因为大多数人过去骑过很多不同的车辆,而且大多数车辆都开着很多人。如果关系是OWNS那么基数很低 - 大多数人拥有一辆车,有些人拥有车辆,车辆通常有一两个车主,而不是更多。

请注意,关系一侧的基数不等于另一侧的基数。如果表是PERSON和FINGER,并且关系是BELONG TO,那么一个人有很多手指,但每个手指只属于一个人。

答案 3 :(得分:0)

有两个概念

  1. 索引基数
  2. 基数

我认为这是指索引基数,这是非常不同的 https://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal/

  • 索引基数被认为是索引中唯一值的数量
  • 该术语用于讨论创建索引,表扫描,索引访问与表访问,它如何影响插入,更新,删除,存储空间

这里是另一个例子, https://en.wikipedia.org/wiki/Cardinality_(SQL_statements)

  • 在SQL(结构化查询语言)中,基数一词是指包含在数据库表的特定列(属性)中的数据值的唯一性。
  • 基数越低,列中的元素重复越多。 因此,具有最低可能基数的列将对每行具有相同的值。 SQL数据库使用基数来帮助确定给定查询的最佳查询计划。

我认为基数一词只关注表之间的关系 特别是,它不是用来讨论单个表或数据唯一性的术语

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 解释基数时,必须考虑关系两端显示的符号。可能的结束标签显示在以下列表中:

  • 0..1(零或一匹配)
  • 1..1(恰好一场比赛)
  • 0..n(零个或多个匹配项)
  • 1..n(一个或多个匹配项)

在数学中,集合的基数是“集合中元素数量”的度量。 (没有提及独特的顺便说一句) https://en.wikipedia.org/wiki/Cardinality

在数据库设计中,一个数据方面相对于另一个方面的基数或基本原理是一项关键功能。彼此之间的关系必须彼此精确且精确,以解释每个方面如何链接在一起。 在关系模型中,表可以与“一对多”,“多对多”,“一对零或一个”等中的任何一个相关联。这被称为给定的表相对于另一个表。 https://en.wikipedia.org/wiki/Cardinality_(data_modeling)