數據庫:關係代數

目錄


有了數據庫,還要通過查詢來獲得數據。SQL是常用的查詢語言,但我想用更抽象的查詢語言來表達,從思路上去理解而忽略實現細節。下面將介紹關係代數。

數據庫實例

在介紹查詢語言之前,先定義一個數據庫實例:
Sailors(sid: integer, sname: string, rating: interger, age: real)
Boats(bid: integer, bname: string, color: string)
Reserves(sid: integer, bid: integer, day: date)

關係代數

選擇與投影

選擇和投影均可對單個關係進行操作。選擇行的操作符爲 σ ,投影列的操作符爲 π ,兩種操作均可以添加檢索條件。

等級大於8的水手: σrating>8(Sailors)
所有水手名字和等級:πsname,rating(Sailors)

集合操作

每個關係都可以看作實例的集合,因此可以對兩個關係進行集合操作。集合操作包括交,並,差以及笛卡爾積,操作符分別爲 × 。兩個關係進行集合操作的結果仍爲關係。

連接

連接操作包括條件連接、相等連接和自然連接,操作符爲 。連接本質上是求笛卡爾積,條件連接是隻對符合條件的元組進行連接,相等連接是條件爲相等表達式的連接,自然連接是隻對存在同名字段的元組進行連接。

所有水手預訂的船隻:SailorsReservesBoats

除並不是基本操作,雖然可以用操作符 表示,但實際上除是由其它操作定義的。考慮兩個關係實例 ABA 有且僅有字段 xy ,而 B 只有一個字段 yAB 定義爲滿足如下條件的 x 的集合,對於 B 中每個元組 y ,在 A 中都有一個元組 <x,y> 與之對應。

AB 定義爲:πx(A)πx((πx(A)×B)A)

參考資料

Raghu Ramakrishnan, Johannes Gehrke. Database Management Systems (Third Edition)[M]. 北京:清華大學出版社, 2003.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章