关系数据库中的术语“元组”是啥意思?
Posted
技术标签:
【中文标题】关系数据库中的术语“元组”是啥意思?【英文标题】:What does the term "Tuple" Mean in Relational Databases?关系数据库中的术语“元组”是什么意思? 【发布时间】:2010-10-19 13:44:14 【问题描述】:请解释一下sql中的元组是什么意思?谢谢..
【问题讨论】:
【参考方案1】:元组用于引用关系数据库模型中的一行。但是 tuple 和 row 有一点区别。
【讨论】:
【参考方案2】:无论在数学中如何使用,RDBMS 中的元组通常被认为是表或结果集中的一行。在 RDBMS 中,元组是无序的。 MDDBMS 中的元组是单元格中的数据实例及其关联的维度实例(成员)。
列族数据存储中的元组是什么?
【讨论】:
【参考方案3】:据我了解,一个表有一组键 K 和一个具有域 K 的键入函数 T。表的一行或“元组”是具有域 K 的函数 r,因此 r(k) 是每个键 k 的 T(k) 元素。因此,该术语具有误导性,因为“元组”实际上更像是一个关联数组。
【讨论】:
【参考方案4】:元组 = 1 条记录; n-tuple = 'n' 记录的有序列表; Elmasri Navathe 书(第 198 页,第 3 版)。
记录 = 有序或无序。
【讨论】:
【参考方案5】:元组是用于关联关系数据库中的表的已知值。
【讨论】:
【参考方案6】:这里的大部分答案都在正确的轨道上。但是,行不是元组。 元组*
是具有名称的无序 组已知值。因此,以下元组是相同的(我使用虚构的元组语法,因为关系元组在很大程度上是一种理论构造):
(x=1, y=2, z=3)
(z=3, y=2, x=1)
(y=2, z=3, x=1)
...当然假设 x、y 和 z 都是整数。另请注意,没有“重复”元组之类的东西。因此,以上不仅是相等的,它们是相同的东西。最后,元组只能包含已知值(因此,没有空值)。
行**
是一组有序的已知或未知值的名称(尽管它们可能被省略)。因此,以下比较在 SQL 中返回 false:
(1, 2, 3) = (3, 2, 1)
(3, 1, 2) = (2, 1, 3)
请注意,有一些方法可以“伪造”它。例如,考虑这个INSERT
语句:
INSERT INTO point VALUES (1, 2, 3)
假设 x 是第一个,y 是第二个,z 是第三个,这个查询可能被重写为:
INSERT INTO point (x, y, z) VALUES (1, 2, 3)
或者这个:
INSERT INTO point (y, z, x) VALUES (2, 3, 1)
...但我们真正要做的只是改变顺序而不是删除它。
还要注意,也可能存在未知值。因此,您可能有未知值的行:
(1, 2, NULL) = (1, 2, NULL)
...但请注意,这种比较总是会产生UNKNOWN
。毕竟,你怎么知道两个未知值是否相等呢?
最后,行可能会重复。换句话说,(1, 2)
和 (1, 2)
可能比较相等,但这并不一定意味着它们是相同的。
如果这是您感兴趣的主题,我强烈建议您阅读 CJ Date 的 SQL and Relational Theory: How to Write Accurate SQL Code。
*
请注意,我说的是元组,因为它们存在于关系模型中,这与一般的数学有点不同。
**
如果您想知道,SQL 中的几乎所有内容都是行或表。因此,(1, 2)
是一行,而VALUES (1, 2)
是一个表(只有一行)。
更新:我在一篇博文here 中对这个答案做了一些扩展。
【讨论】:
您好,我已经阅读了您的答案,并且在 SO(this question 上的 Mike Samuel 和that question 上的 sampson-chen)以及 here 和 @987654326 上阅读了类似的答案@,并且所有人都说元组是有序集合,而不是无序的。因此,您的回答让我感到困惑。 我现在只是在经历这个,但是如果一行有一个唯一的主键,那不会使每一行都以这种方式唯一吗?不管它是如何排序的? 基本问题:(x=1, y=2, z=3)
是 1 个元组还是 3 个元组?
我不明白 (1, 2, 3) = (3, 2, 1) 在 SQL 中如何不相等,这是一件坏事吗?我的意思是,它们是两个不同的东西,假设 x = 3、y = 2 和 z =1。我认为通过在 SQL 示例中不省略 name 可以更清楚地说明答案。看了你的博文我还是很迷茫
这个答案无法区分默认情况下“元组”在数学(有序)和关系数据库上下文(无序名称-值对集)中的不同含义。如果您区分表达式所表示的内容,这也会有所帮助。例如,“1/2”和“3/6”是表示分数值的二分之一,即1/2 的两种不同表达方式。如果您区分值的相等性和专门处理值 NULL 的 SQL 运算符 =
,这也会有所帮助。例如,根据前面表达式和外延之间的区别,x = y
并不意味着 x 等于 y。【参考方案7】:
这是一个缩短的“N-tuple
”(如quadruple
、quintuple
等)
它是作为一个整体的行集的一行。
如果您发出:
SELECT col1, col2
FROM mytable
,整个结果将是一个ROWSET
,每对col1, col2
将是一个tuple
。
一些数据库可以将一个元组作为一个整体来工作。
就像,你可以这样做:
SELECT col1, col2
FROM mytable
WHERE (col1, col2) =
(
SELECT col3, col4
FROM othertable
)
,它检查来自一个rowset
的整个tuple
是否与来自另一个rowset
的整个tuple
匹配。
【讨论】:
【参考方案8】:在关系数据库中,表是relations (in mathematical meaning)。关系是一组元组。因此关系数据库中的表行是关系中的元组。
关系维基:
在数学中(更具体地说,在 集合论和逻辑),关系是 赋予真值的属性 k 的组合(k 元组) 个人。通常,该物业 描述可能的连接 在 k 元组的组件之间。 对于给定的一组 k 元组,一个真值 将值分配给每个 k 元组 根据属性是否 或不成立。
【讨论】:
Jason,vartec 说的相反:关系数据库中的表行是关系中的元组” 他确实也说过“表格是关系(在数学意义上)。”也许我应该说“表不是关系”。 :-)【参考方案9】:元组用于定义来自多维数据集的数据切片;它由一个或多个维度的一个成员的有序集合组成。元组用于识别多维数据集中的多维数据的特定部分;由多维数据集中每个维度的一个成员组成的元组完整地描述了一个单元格值。
【讨论】:
在关系模型中,元组不排序:en.wikipedia.org/wiki/Tuple#Relational_model【参考方案10】:数据库表中的行
【讨论】:
它是数据库表中的一行还是任何集合中的任何行?如果你从多个表、视图等创建一个投影,每一行也是一个元组吗? 元组可能是行的子集 AFAIK,结果集中的一行 - 这可能是来自一个表、多个表、视图等的所有字段。 @Tom Carter - 行也可能是行的子集。 :-)以上是关于关系数据库中的术语“元组”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章