2009-06-07 88 views
5

Aheo询问是否为ok to have a table with just one column。如果没有列,或者由于在大多数现代“关系型”数据库管理系统中似乎很难实现,没有属性的关系?带关键属性

+0

这是什么意思? “什么是没有属性的关系?”你能给出任何一种现实世界的例子吗? – 2009-06-07 02:03:21

+0

我认为问题在于没有真实世界的例子...... – jerryjvl 2009-06-07 02:06:13

+2

“CREATE TABLE dee()”后跟“INSERT INTO DEE VALUES()”应该有效,如果你的DBMS是真正的关系型的话。 – 2009-09-18 10:11:01

回答

2

DEE和笛卡尔积形成一个幺半群。在实践中,如果你有Date的关系总结操作符,你可以使用DEE作为你的分组关系来获得总数。还有很多其他例子,其中DEE实际上是有用的,例如,在具有二元连接运算符的函数设置中,您将获得n-ary连接= foldr连接dee

3

单列表是一组表 - 只要您不关心排序值或关联任何其他信息,它似乎很好。你可以检查它的成员身份,基本上这就是你所能做的。 (如果您对单列没有UNIQUE约束,我想您也可以统计出现次数......多重集)。

但火焰中会出现一个没有列的表格(或没有属性的关系)意思是 - 或者,它会有什么好处?

+1

这是什么意思,它是否会有什么好处是两件完全不同的事情...... – 2009-06-07 02:13:30

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(); 
3

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

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

0

具有单列的表格将作为简单的查找变得有意义。比方说,你有一个你想过滤用户输入文本的字符串列表。该表格会存储您想要过滤的字词。

2

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

它们在各种关系运算符的身份上起作用,在普通代数中扮演相当于1和0的角色。 “

当然他们在布尔代数中也扮演了“真”和“假”的角色。这意味着当“店铺开放”和“闹钟已设置”等提案在数据库中表现出来时,它们很有用。

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

0

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

在关系代数中看到TABLE_DEE和TABLE_DUM的效用也很困难。一个人不得不超越那个。为了让你了解这些常量如何生机勃勃,请考虑将关系代数放入恰当的数学形状,即尽可能接近布尔代数。 D & D代数A是朝这个方向迈出的一步。然后,可以通过更基本的代数表达经典的关系代数运算,这两个常数变得非常方便。