2012-02-07 78 views
2

是否可以獲得兩列之間的最大差異(例如開始和結束權重)?使用關係代數的列之間的最大差異

現在我傾向於沒有,因爲這需要一個新的列與每行的兩列之間的差異,然後採取最大的。由於在選擇操作的條件下不允許算術運算(例如SIGMA(c1 - c2 < c3 - c4)(Table)不允許),所以按照我原先的設計方式進行操作也不起作用。

披露:這是一個作業問題的一部分。

+1

如果我理解正確,「兩列之間最大差異」的結果是一個標量值,而任何關係操作的結果都是一個關係。 – onedaywhen 2012-02-07 15:04:37

回答

0

如果您正在尋找這樣做在現實世界中,你應該能夠使用子查詢(或視圖,其數額爲同樣的事情)要做到這一點,是這樣的:

select max (diff) from (
    select high - low as diff from blah blah blah 
) 

這是否適用於關係代數的抽象世界,我不能說。我忙於解決那些該死的真實世界問題:-)

1

它可以完全按照您計劃的方式完成,但您需要對此進行一般化投影。廣義投影是操作者

Π(E1, E2,..., En)R 

,其中R是一個關係,和E1 ...恩表格中a⊕b,其中a和b是R或常量的屬性表達式,⊕是任意它們之間的二元運算符結果是與屬性E1 ... En的關係。

這將允許您將差異投影到新的關係中(R':=Π(x-y)R),然後根據您的計劃找到最大值。

如果我們不允許使用廣義投影,那麼我認爲我們沒有辦法從另一個實際減去一個屬性,或者實際上從它們計算任何東西,因爲投影的定義只允許屬性名稱,而選擇的定義只允許aθb形式的表達式,其中a和b是屬性或常量,θ是二元關係運算符(這是邏輯的,因爲如果我們有關係R(X,Y),那麼我們有不知道X或Y的類型,使他們的操作相當無意義)。

我認爲廣義投影是關係代數的一個很好的擴展。它在現實生活中顯然非常有用,甚至可以從更科學的觀點來辯護它:如果我們允許像「X> 50」這樣的值的二元條件運算符,那麼我們已經對該類型做出了假設,沒有實際意義。不過,你的導師可能不同意。