2013-04-24 59 views
2

我有3個不同的表,每個表只有一個字段。合併關係代數中的單個字段表

|fname1 | |fname2 | |fname3 | 
|*******| |*******| |*******| 
|Adam | |Andy | |Alan | 
|Bob | |Bryan | |David | 
|Charles| |Chuck | |Shawn | 

我想這些表合併爲一個大桌子,只有一個「FNAME」字段,如下所示:

|fname | 
|*******| 
|Adam | 
|Bob | 
|Charles| 
|Andy | 
|Bryan | 
|Chuck | 
|Alan | 
|David | 
|Shawn | 

這是SQL很簡單,但我不能爲我的數字生活看看如何用關係代數來寫這個。我不關心訂單,只是所有的數據都在一個字段下的大表中。

+0

難道不是簡單的'R1 U R2 U R3'的情況嗎? – 2013-04-24 22:54:34

+0

這是我的第一個猜測,但我不確定工會是否會保留或刪除重複的內容 – 2013-04-25 00:08:20

+0

我相信union **會刪除重複內容,但我沒有在您的數據示例中看到任何內容。雖然SQL有'UNION'和'UNION ALL',但我在關係代數中找不到直接的類似物。完整的披露:雖然我對集合論並不陌生,但我從未學習過關係代數本身。 – 2013-04-25 13:59:46

回答

2

理論上,關係代數處理集合。一套永遠不會有重複。

在實踐中,關係數據庫並不實現基於集合的關係代數。其中一個原因是性能。每個查詢都必須刪除重複項(這是一項昂貴的操作),因此在實踐中,DBMS處理多集:允許重複元組。

這提出了一個挑戰:SQL並沒有真正有效處理重複元組的方法。例如,假設你有一個具有一個屬性的表和兩個相同的元組。現在刪除第一個元組並離開第二個元組。沒有某種類型的黑客就無法做到這一點。

回到你的問題:你的問題的答案是聯合。

R1 R2üüR3

它不會在關係代數的問題,如果有重複的,因爲從理論上講,你不能在套重複。

--dmg