我有一個關係關係代數中允許乘法嗎?
R
-------
cid sid gradepoint credits
CS425 001 4.0 3
我需要計算GPA。有更多的行,但我相信如果我只是得到這個答案,我應該與其餘的。我需要做gradepoint * credits
。我如何用關係代數表達式來表達這一點?
我最好的猜測是:
,但我不知道如果我可以和任何其他不是常數乘屬性。
我有一個關係關係代數中允許乘法嗎?
R
-------
cid sid gradepoint credits
CS425 001 4.0 3
我需要計算GPA。有更多的行,但我相信如果我只是得到這個答案,我應該與其餘的。我需要做gradepoint * credits
。我如何用關係代數表達式來表達這一點?
我最好的猜測是:
,但我不知道如果我可以和任何其他不是常數乘屬性。
關係代數沒有解決特定領域的業務。它既不包含也不排除它,就像真代數既不包含也不排除關係運算。
如果允許的常量乘法,你已經結合代數(這是非常需要的任何實際應用),所以我認爲沒有理由屬性之間不允許乘法。
請注意,如果你喜歡使用表達式允許那麼投影/Π是做乘法。它的輸入不是關係數值,而是其關係值&屬性名稱,它的輸入是一個關係值,某些類型的表達式包含輸入屬性類型值的運算符名稱。您的預測/Π正在解析和相乘。所以它是一個不同的運營商比只接受屬性名稱。
投影/Π這需要屬性表達式求給出投影代數及其實施的問題/Π只在關係值和屬性名。這在學術環境中很重要,因爲問題可能會讓你真正想到如何去做,或者因爲問題的難度取決於可用的操作員。因此,找出你應該使用的代數。
我們可以引入屬性值的操作時,我們只需要基本的關係,運營商採取的屬性名稱和關係價值。每個這樣的運算符都可以與一個關係值相關聯,該關係值具有每個操作數的屬性和結果的屬性。該關係包含結果值等於調用運算符值的運算符結果的元組。 (結果是功能上依賴於操作數)。
因此,假設我們有地方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可選引用中。但是,也許你可以看到爲什麼簡單的東西,如僅僅使用屬性名稱&與唯一的,無序的屬性名稱的關係值操作的代數有助於我們理解自包含的塊。
取決於你的代數是多麼的純粹。例如。來自[Wikipedia](https://en.wikipedia.org/wiki/Relational_algebra#Operations_for_domain_computations):「迄今爲止,關係代數中沒有任何東西可以引入數據域的計算(除了評估涉及相等的命題表達式) 。例如,不可能僅使用迄今爲止引入的代數來編寫一個表達式,該表達式將乘以兩列的數字。「 –
@Damien_The_Unbeliever啊,我明白了。可能有辦法「模擬」乘法嗎? – JohnSmithy1266
什麼是您正在使用的「關係代數」的參考?有許多。 PS請使用文本作爲文本,不要使用圖像/鏈接 - 使用表格的代碼格式;用符號表示詞;或谷歌「統一碼符號」。 – philipxy