2015-10-27 53 views
1

我目前正在處理關係代數分解問題。我有以下兩個關係:關係代數分區

   A | B | C     B 
       --|---|--    --- 
       1 | 2 | 3     2 
Relation R = 1 | 2 | 6 Relation T = 
       4 | 2 | 2 
       4 | 5 | 6 

現在我做如下操作:R ÷ T

當我計算這個,我的結果如下:

   A | C     
       --|--    
       1 | 3    
R ÷ T =  1 | 6  
       4 | 2 

對我來說,因爲對於這個部門,我看看R中的那些元組,這些元組與T中的所有元組一起存在。但是,當我使用關係代數運算,如RelaX返回

   A | C     
       --|--    
    R ÷ T =  4 | 2     

哪裏我犯了一個錯誤?預先感謝您的幫助。

有沒有人可以幫忙?

+1

只要R÷T搜索R中列A和C中唯一與'2'一起出現的數值'(1,3);(1,6 );(4,2)' – Marine1

回答

0

對這些模式進行劃分並不能完全理解操作員的工作方式。該操作員的定義不是很清楚,操作通常由其他操作員的組合取代。

一個清楚的方式來看看你的情況如何工作將創建一個新的R實例與列有序定義一個新的架構:(A,C,B)。這就是說,使T的屬性顯示爲A中的最後一個屬性。在這種情況下,如果你正在執行一個非常簡單的劃分,看到結果非常簡單,但想象一下,如果你有架構R(A,D,B, C)和T(B,D)。在這裏,T的屬性在R中以不同的順序出現,並且給定一些沒有多少元組的實例已經很難通過查看它們來檢查。

這可能是關係代數中定義的最困難的算子,因爲查詢通常涉及選擇,投影和連接的概念。而且僅僅把它放在單詞上也很複雜。 思考這個操作符的一個好方法就是思考SQL上的GROUP BY。在您的示例中,這意味着使用GROUP BY屬性A,C - 這將創建具有這些模式實例上顯示的這些屬性的不同值的每個組合的組。這些組中的每個組都有一組所有與A,C的值組合相關的值。如果將T的實例中的屬性B的值看作一組,可以快速驗證:for每個組通過A,C分組獲得,如果T中B的值集合包含在R中B的值集合中,則A,C的值是所得關係的元組。

我知道我對這個問題有點遲,但我看到很多人對此感到困惑。如果還不夠清楚,我可以參考我寫的一篇文檔,詳細解釋它,並且有一個很好的例子,HERE