2014-08-28 124 views
5

我校书Database Systems定义基数如下:什么是基数的定义SQL

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

虽然上Cardinality (SQL statements)维基百科文章,如下定义它:

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

它们都可能是正确的,但我不能将两个定义连接为相关定义。换句话说会好的!

+1

基数是唯一值/记录数的数量。我认为该书简化了该问题。最大基数为1。 – Mihai 2014-08-28 11:51:23

回答

7

他们讲的是同样的事情,它与元组(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 

作为只要学生IDcardinalityhigh,因为它是唯一的。它有五(5)个元组/行。

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

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

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

另一方面,当谈到Cardinality时,Database的教科书通常与一个实体相关的另一个实体有关,也就是说,参与给定关系类型的实体可能发生的关系的数量。因此,例如对于binary relationshipcardinality可以是one-to-one,one-to-manymany-to-many

4

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

数据库文本书中的版本重点关注关系代数和表的结构(该术语中的“关系”)。

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

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

0

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

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