2009-06-07 87 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是朝這個方向邁出的一步。然後,可以通過更基本的代數表達經典的關係代數運算,這兩個常數變得非常方便。