1. 程式人生 > >數據庫文章翻譯

數據庫文章翻譯

adding lsp padding sci 更改 計算 com abr 依賴

關系運算

所有的程序關系都為查詢語言提供了一組可以用來表示單個或多個關系的操作。這些操作具有良好並受到較高期望的屬性,能實現其結果有唯一的對應關系。

這些操作還可以用模板化的方式組合當中的幾個操作。確切的說,因為查詢結果本身就是一種關系,關系操作也可用於查詢結果以及定義所給的關系。

具體的關系操作根據語言的不同而有所不同,但是適合我們在本節中描述的通用框架。在第三章中,我們用特定的方式操作表示SQL。

最常見的操作是從單個關系(比作教師)中選擇特定的元組,這些元組滿足某些特定的謂詞(比作$8.5萬美元)。其結果是一個新的關系,它是原始關系(教師)的一個子集。例如,如果我們從圖2.1的教師關系中選擇元組,滿足謂詞“薪水大於$85000”,我們得到如圖2。10所示的結果。

編號

姓名

部門

工資

12121

22222

33456

83821

Wu

Einstein

Gold

Brandt

金融

物理

物理

Comp.Sci

90000

95000

87000

92000

另一個常見的操作是從一個關系中選擇某些屬性(列)。結果是只有那些選擇的屬性的新關系。例如,假設我們想要一個教師編號和薪水的列表,正如圖2.11所示,具有兩個屬性,分別為姓名和薪水,就不需要從圖2.1的教師關系表中列出姓名和部門的名稱值,其中結果的每個元組都來自於教師關系表的一個元組,但是其只包含所顯示選定的元組的屬性。

連接操作允許兩個關系的合並,合並對元組,一個從每個關系,到一個單一的元組。有許多不同的方式加入關系(如我們在第3章中所見)。圖2.12顯示了一個例子,從教師和部門表中加入了元組,新的元組顯示了她在工作中的每一個老師和部門的信息。這一結果是通過將每一個元組與在該系關系中的元組中的教師關系中的元組組成。

編號

工資

10101

12121

15151

22222

32343

33456

45565

58583

76543

76766

83821

98345

65000

90000

40000

95000

60000

87000

75000

62000

80000

72000

92000

80000

圖2.11查詢教練關系選擇屬性ID和工資的結果

編號

姓名

工資

部門

建築物

預算

10101

12121

15151

22222

32343

33456

45565

58583

76543

76766

83821

98345

Srinivasan

WU

Mozart

Einstein

ElSaid

Gold

Katz

Califieri

Singh

Crick

Brandt

Kim

65000

90000

40000

95000

60000

87000

75000

62000

80000

72000

92000

80000

計算機科學

財政

音樂

物理學

歷史

物理學

計算機科學

歷史

財政

生物

計算機科學

電子工程

Taylor

Painter

Packard

Watson

Painter

Watson

Taylor

Painter

Painter

Watson

Taylor

Taylor

100000

120000

80000

70000

50000

70000

100000

50000

120000

90000

100000

85000

圖2.12對教師和部門的關系自然連接的結果。

如圖2.12所示的聯接形式,稱為自然連接,從教練關系元組匹配元組ID部門關系

他們的部門屬性是相同的。所有這樣的匹配對元組都存在於聯接結果中。一般來說,在兩個關系的自然連接運算匹配元組的值,是所有的屬性名稱相同對兩者的關系。

笛卡爾產品運算結合了兩種關系中的元組,但不像連接操作,它的結果包含兩個關系中的所有元組,不管它們的屬性值是否匹配。

因為關系式集合,所以我們可以對關系進行正常的集合操作。Union操作執行兩個“相似結構”表的集合(比如一張所有研究生的桌子和一張本科生的桌子)。例如,一個部門可以獲得所有學生的集合。另一組操作,例如交叉和設置差異也可以進行。

如前面所提到的,我們可以對查詢結果執行操作。例如,如果我們想找到那些薪水超過$85.000工資的教師的身份證,我們將在示例中執行以上兩個操作。首先,我們從教師關系中選擇這些元組薪水大於$85.000。然後從結果中選擇ID和薪水兩個屬性。結果為如圖2.13所示的關系,該關系由ID組成。

編號

工資

12121

22222

33456

83821

90000

95000

87000

92000

圖2.13的結果是選擇具有更高薪水的教師的屬性ID和薪水超過$58.000。

關系代數

關系代數定義了一組操作,平行的通常的代數。列如加,減或乘。這些數字運算。正如代數運算的數量,把一個或多個數字輸入和輸出返回一個數,關系代數運算通常以一個或兩個關系作為輸入並返回一個關系。

代數運算包含第六章的一些細節,但是我們概括了以下的一些操作要點。

符號(名稱)

使用的實例

選擇的項目

工資》=85000

返回行的輸入關系滿足預測

從所有行中輸出指定的屬性

輸入關系。刪除重復的元組

從輸出。

自然的加入

從兩個輸入的關系,具有相同的值的所有屬性的行輸出對

同名的。

笛卡爾積

從兩個輸入中輸出所有行對

關系(不管他們是否

在公共屬性上具有相同的值

聯合

從兩個輸入輸出元組的聯盟

關系.

薪酬。在這個例子中,我們可以在其中執行操作。秩序,但情況並非如此,我們將看到,有時,一個查詢的結果中包含重復元組。例如,如果我們從講師關系中選擇部門名稱屬性,幾個案例重復,包括“合並”。“Sci,”它出現了三次。某些關系語言嚴格地依賴於集合的數學定義並移除。重復。其他,考慮到相對大量的處理需要從結果關系中刪除重復,保留。在這後一種情況,關系並不是真正的數學關系,術語感。

當然在數據庫中的數據必須要修改好多次,一種關系能夠被一種新的可選擇的元組所更新,刪除現有的元組,或是更改某些屬性的值。整個關系可以刪除和新建。

我們將討論關系查詢和更新使用SQL語言從第三章到底五章。

****選自《DATABASE SYSTEM CONCEPTS》2.6 Relational Operations

作者:Abraham Silberschatz

Henry F. Korth

S. Sudarshan

數據庫文章翻譯