【问题标题】:What is the definition of cardinality in SQLSQL中基数的定义是什么
【发布时间】:2021-06-15 17:56:01
【问题描述】:

我的教科书Database Systems 定义基数如下:

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

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

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

它们可能都是正确的,但我无法将这两个定义连接为相关定义。改写一下就好了!

【问题讨论】:

  • 基数是唯一值的数量/记录的数量。我认为这本书简化了问题。最大基数是 1。
  • 这能回答你的问题吗? What is cardinality in Databases?

标签: mysql sql statements cardinality


【解决方案1】:

他们说的是同一件事,它与元组 (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) 个元组/行。

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

最后,Gender只有两个可能的唯一元组,因此Low Cardinality

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

另一方面,Database 的教科书在谈到 Cardinality 时通常与一个实体与另一个实体的关系有关,即参与给定关系类型的实体可能出现的关系数量.因此,例如对于binary relationshipcardinality 可以是one-to-oneone-to-manymany-to-many

【讨论】:

    【解决方案2】:

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

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

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

    这对于优化查询很重要。基数是选择连接、聚合和选择数据的最佳方法的一个组成部分。在实践中,大多数数据库使用比基数更多的信息,即关于列及其值的所谓“统计”以进行优化。

    【讨论】:

      【解决方案3】:

      有两个概念

      1. 索引基数
      2. 基数

      我相信这指的是 index cardinality,这是非常不同的 https://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal/

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

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

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

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

      IBM 文档(如果您搜索单词 unique,则不会提及) 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)

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2016-07-11
          • 2011-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-13
          • 1970-01-01
          • 2011-02-03
          相关资源
          最近更新 更多