2016-10-30 92 views
0

對於何時使用這兩個運算符,我有點困惑。我覺得我理解他們,但我很難弄清楚什麼時候需要他們進行關係代數表述。有人能給我一些見解/建議嗎?關係代數交叉產品和自然聯接

+0

請給您正在使用的realtional代數的版本的參考。或者描述關係的各個部分以及如何調用運營商。 – philipxy

+0

你谷歌你的(大概是合適的)標題,即'關係代數交叉產品和自然加入網站:stackoverflow.com'? – philipxy

回答

0

某些版本的關係代數具有關聯標題,這些關係標題是(無序的,唯一命名的)屬性的集合。然後(關係(笛卡爾))產品,又名CROSS JOIN,又名CROSS PRODUCT,只有當輸入關係不共享屬性名稱,否則就像NATURAL JOIN一樣定義。所以它的作用是確認你期望沒有共享屬性名稱。 (某些版本的關係代數的關係標題不是集合;屬性可以是有序的,或者多個屬性可以具有相同的名稱。通常,PRODUCT爲每個輸入屬性輸出一個屬性,如果有一個NATURAL JOIN,則它的結果就像先做PRODUCT一樣,然後確定相同名稱屬性對的相等性,然後計算出每對的一個屬性,所以PRODUCT適用於任何兩個輸入,當一個輸入具有重複屬性時,NATURAL JOIN可能是未定義的名字,但他們會給時,有沒有共享的屬性名相同的結果)

至於why you would compose any particular relational algebra query

每個表/關係都有一個由 列/屬性參數化的語句。 (它的「特徵謂詞」)。使表達式成立的行/元組 進入表/關係。首先找到爲給定的表/關係 聲明:

// customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch] 
Deposit (Branch, Acc-No, Cust-Name, Balance) 
// customer [Cust-Name] loan [Loan-No] balance is £[Balance] at branch [Branch] 
Loan(Branch, Loan-No, Cust-Name, Balance) 

現在把這些給報表一併獲得,只有 行我們要滿足的聲明。使用AND,OR,NOT和AND條件。保留或 刪除名稱。如果您需要,請使用新名稱。

customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch] 
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch] 

我們得到代數替換:

  • 每聲明其表/關係
  • 每一個和⋈表/關係報表(自然連接)
  • 表/關係語句的每個OR(它們必須具有相同的列/ attributes)通過∪(工會)
  • 每而不是語句(必須由σ由\具有相同的列/屬性)(差)
  • EVERY和條件條件
  • 每一個保持通過名字π保持名稱保持(投影)(和π刪除名稱保持
  • 每列/屬性由ρ在給定的聲明重命名(更名)。

∩(交叉點)和x(產品)是⋈的特殊情況下(兩 兩側∩相同的列/屬性以及x爲沒有共享 列/屬性)。

(ρ Loan-Balance/Balance Loan) ⋈ Deposit