2017-09-20 60 views
-1

我有一個關係關係代數中允許乘法嗎?

R 
------- 
cid  sid  gradepoint  credits 

CS425 001  4.0    3 

我需要計算GPA。有更多的行,但我相信如果我只是得到這個答案,我應該與其餘的。我需要做gradepoint * credits。我如何用關係代數表達式來表達這一點?

我最好的猜測是:

enter image description here

,但我不知道如果我可以和任何其他不是常數乘屬性。

+0

取決於你的代數是多麼的純粹。例如。來自[Wikipedia](https://en.wikipedia.org/wiki/Relational_algebra#Operations_for_domain_computations):「迄今爲止,關係代數中沒有任何東西可以引入數據域的計算(除了評估涉及相等的命題表達式) 。例如,不可能僅使用迄今爲止引入的代數來編寫一個表達式,該表達式將乘以兩列的數字。「 –

+0

@Damien_The_Unbeliever啊,我明白了。可能有辦法「模擬」乘法嗎? – JohnSmithy1266

+0

什麼是您正在使用的「關係代數」的參考?有許多。 PS請使用文本作爲文本,不要使用圖像/鏈接 - 使用表格的代碼格式;用符號表示詞;或谷歌「統一碼符號」。 – philipxy

回答

0

關係代數沒有解決特定領域的業務。它既不包含也不排除它,就像真代數既不包含也不排除關係運算。

如果允許的常量乘法,你已經結合代數(這是非常需要的任何實際應用),所以我認爲沒有理由屬性之間不允許乘法。

0

請注意,如果你喜歡使用表達式允許那麼投影/Π是做乘法。它的輸入不是關係數值,而是其關係值&屬性名稱,它的輸入是一個關係值,某些類型的表達式包含輸入屬性類型值的運算符名稱。您的預測/Π正在解析和相乘。所以它是一個不同的運營商比只接受屬性名稱。

投影/Π這需要屬性表達式求給出投影代數及其實施的問題/Π只在關係值和屬性名。這在學術環境中很重要,因爲問題可能會讓你真正想到如何去做,或者因爲問題的難度取決於可用的操作員。因此,找出你應該使用的代數。

我們可以引入屬性值的操作時,我們只需要基本的關係,運營商採取的屬性名稱和關係價值。每個這樣的運算符都可以與一個關係值相關聯,該關係值具有每個操作數的屬性和結果的屬性。該關係包含結果值等於調用運算符值的運算符結果的元組。 (結果是功能上依賴於操作數)。

因此,假設我們有地方left * right = result下表值Times持有的元組:

left right result 
------------------- 
0  0  0 
1  0  0 
... 
0  1  0 
1  1  1 
2  1  2 
... 

如果你的計算屬性是result那麼你要

/* tuples where for some credits & gradepoint, 
     course cid's student sid earned grade gradepoint and credits  credits 
    and credits * gradepoint = result 
*/ 
project cid, sid, result (
    R natural join (rename left\credits right\gradepoint (Times)) 
    ) 

另請參閱this question & my answer

PS重新代數VS語言:什麼是對「關係代數」你正在使用的參考?有許多。他們甚至對「關係」是什麼有不同的概念。一些所謂的「代數」實際上是語言,因爲表達式不僅表示運算符在值上調用的結果。儘管代數有可能具有表示表達式和/或包含其自身名稱的關係值的操作數值。

PS重新分離問題:你還沒有說過乘法結果的屬性名稱是什麼。如果你期望它是credit * gradepoint那麼你是期待投影/Π映射表達式值的輸入到屬性名稱。除了您希望credit * gradepoint被識別爲具有兩個屬性名稱&和一個運算符名稱的表達式,而在另一個位置只是一個屬性名稱。在語言設計中有這些東西的解決方案,例如在專用於屬性名稱的SQL可選引用中。但是,也許你可以看到爲什麼簡單的東西,如僅僅使用屬性名稱&與唯一的,無序的屬性名稱的關係值操作的代數有助於我們理解自包含的塊。