Aheo询问是否可以有一张只有一列的表格。一个没有列的关系怎么样?
7 回答
恰好有两个没有属性的关系,一个有一个空元组,一个没有。在《第三宣言》中,伊达和达尔文(有点)幽默地命名了他们TABLE_DEE
和TABLE_DUM
(分别)。
它们在某种程度上是有用的,因为它们是各种关系运算符的标识,在普通代数中扮演相当于 1 和 0 的角色。
具有单列的表是一个集合——只要您不关心对值进行排序或将任何其他信息与它们相关联,它似乎就可以了。您可以检查其中的成员资格,基本上这就是您所能做的。UNIQUE
(如果你对单列没有约束,我猜你也可以计算出现次数......一个多重集)。
但是,一个没有列(或没有属性的关系)的表意味着什么——或者,它有什么好处?!
DEE 和笛卡尔积形成一个幺半群。在实践中,如果您有 Date 的关系汇总运算符,您将使用 DEE 作为分组关系来获得总计。还有许多其他 DEE 实际有用的示例,例如在具有二元连接运算符的功能设置中,您会得到 n-ary join = foldr join dee
“恰好有两种没有属性的关系,一种有空元组,一种没有。在第三宣言中,Date 和 Darwen(有点)幽默地将它们命名为 TABLE_DEE 和 TABLE_DUM(分别)。
它们在某种程度上是有用的,因为它们是各种关系运算符的标识,在普通代数中扮演相当于 1 和 0 的角色。”
当然,它们在布尔代数中也扮演着“TRUE”和“FALSE”的角色。这意味着当要在数据库中表示诸如“商店开门”和“警报已设置”之类的命题时,它们很有用。
这样做的结果是,它们也可以有用地用于关系代数的任何表达式中,因为它们具有“充当 IF/ELSE”的属性:加入 TABLE_DUM 意味着完全不保留来自另一个参数的元组,加入 TABLE_DEE 意味着保留它们。因此,将 R 连接到可以等于 TABLE_DEE 或 TABLE_DUM 的关系变量 S 是“如果 S 则 R 否则 FI”的 RA 等价物,其中 FI 代表空关系。
嗯。因此,缺乏“真实世界的例子”让我感到困惑,我尽了最大努力。也许令人惊讶的是,我已经成功了一半!
cjs=> 创建表 D (); 创建表 cjs=> 从 D 中选择计数 (*); 数数 -------- 0 (1 行) cjs=> 插入 D () 值 (); 错误:“)”处或附近的语法错误 第 1 行:插入 D () 值 ();
具有单列的表作为简单的查找是有意义的。假设您有一个要针对用户输入的文本进行过滤的字符串列表。该表将存储您想要过滤掉的单词。
从 SQL 数据库的角度来看,很难看到 TABLE_DEE 和 TABLE_DUM 的实用性。毕竟,不能保证您最喜欢的数据库供应商允许您创建一个或另一个。
在关系代数中也很难看到 TABLE_DEE 和 TABLE_DUM 的实用性。人们必须超越这一点。为了让您了解这些常数如何变得生动,请考虑将关系代数放入适当的数学形式中,即尽可能接近布尔代数。D&D 代数 A 是朝这个方向迈出的一步。然后,可以通过更基本的关系代数运算来表达经典的关系代数运算,这两个常数变得非常方便。