没有属性的关系

时间:2009-06-07 02:00:35

标签: rdbms relational-algebra

Aheo询问是ok to have a table with just one column。一个没有列的人,或者,鉴于这在大多数现代“关系型”DBMS中似乎很难做到,没有属性的关系呢?

7 个答案:

答案 0 :(得分:3)

具有单列的表是一个集合 - 只要您不关心对值进行排序,或者将任何其他信息与它们相关联,它就好了。您可以检查其中的成员资格,基本上就是您可以做的所有事情。 (如果您对单个列没有UNIQUE约束,我猜您也可以计算出现次数...多个集合。

但是火焰中没有列的表(或没有属性的关系)意味着 - 或者,它会有什么好处?!

答案 1 :(得分:3)

有两个没有属性的关系,一个是空元组,一个没有。在The Third Manifesto中,Date和Darwen(有点)幽默地将它们命名为TABLE_DEETABLE_DUM(分别)。

它们是有用的,因为它们是各种关系运算符的身份,在普通代数中扮演相当于1和0的角色。

答案 2 :(得分:2)

DEE和笛卡儿产品形成一个幺半群。实际上,如果你有Date的关系摘要运算符,你可以使用DEE作为分组关系来获得总计。还有许多其他例子,其中DEE实际上是有用的,例如在具有二元连接运算符的功能设置中,您将获得n-ary join = foldr join dee

答案 3 :(得分:2)

“正好有两个没有属性的关系,一个有空元组,一个没有。在第三个宣言中,Date和Darwen(有点)幽默地将它们命名为TABLE_DEE和TABLE_DUM(分别)。

它们是有用的,因为它们是各种关系运算符的标识,在普通代数中扮演相当于1和0的角色。“

当然,他们在布尔代数中也扮演“TRUE”和“FALSE”的角色。这意味着当“商店开放”和“警报设置”等命题在数据库中表示时它们很有用。

这样做的结果是它们也可以有用地用于关系代数的任何表达式,因为它们的属性是“充当IF / ELSE”:加入TABLE_DUM意味着根本不保留其他参数的元组,加入到TABLE_DEE意味着保留所有。因此,将R连接到relvar S(可以等于TABLE_DEE或TABLE_DUM),RA等效于“if S then R else FI”,其中FI代表空关系。

答案 4 :(得分:0)

嗯。所以缺乏“真实世界的例子”给了我,我尽我所能。也许令人惊讶的是,我走了一半!

cjs=> CREATE TABLE D ();
CREATE TABLE
cjs=> SELECT COUNT (*) FROM D;
 count 
-------
     0
(1 row)

cjs=> INSERT INTO D () VALUES ();
ERROR:  syntax error at or near ")"
LINE 1: INSERT INTO D () VALUES ();

答案 5 :(得分:0)

具有单列的表将作为简单查找有意义。假设您有一个要为用户输入文本过滤的字符串列表。该表将存储您想要过滤的单词。

答案 6 :(得分:0)

很难从SQL数据库的角度看到TABLE_DEE和TABLE_DUM的实用程序。毕竟,不能保证您最喜欢的数据库供应商允许您创建一个或另一个。

在关系代数中也很难看到TABLE_DEE和TABLE_DUM的效用。人们必须超越这一点。为了让你了解这些常数如何变得生动,考虑将关系代数置于适当的数学形状中,这与布尔代数尽可能接近。 D& D代数A是朝这个方向迈出的一步。然后,人们可以通过更基本的关系代数运算表达经典的关系代数运算,这两个常数变得非常方便。