数据库:关系代数

目录

文章目录

    • @[toc]
  • 数据库实例
  • 关系代数
    • 选择与投影
    • 集合操作
    • 连接
  • 参考资料

有了数据库,还要通过查询来获得数据。SQL是常用的查询语言,但我想用更抽象的查询语言来表达,从思路上去理解而忽略实现细节。下面将介绍关系代数。

数据库实例

在介绍查询语言之前,先定义一个数据库实例:
Sailors(sid: integer, sname: string, rating: interger, age: real)
Boats(bid: integer, bname: string, color: string)
Reserves(sid: integer, bid: integer, day: date)

关系代数

选择与投影

选择和投影均可对单个关系进行操作。选择行的操作符为 σ \sigma σ,投影列的操作符为 π \pi π,两种操作均可以添加检索条件。

等级大于8的水手: σ r a t i n g > 8 ( S a i l o r s ) \sigma{_{rating > 8}}(Sailors) σrating>8(Sailors)
所有水手名字和等级: π s n a m e , r a t i n g ( S a i l o r s ) \pi{_{sname, rating}}(Sailors) πsname,rating(Sailors)

集合操作

每个关系都可以看作实例的集合,因此可以对两个关系进行集合操作。集合操作包括交,并,差以及笛卡尔积,操作符分别为 ⋂ \bigcap ⋃ \bigcup − - × \times ×。两个关系进行集合操作的结果仍为关系。

连接

连接操作包括条件连接、相等连接和自然连接,操作符为 ⋈ \Join 。连接本质上是求笛卡尔积,条件连接是只对符合条件的元组进行连接,相等连接是条件为相等表达式的连接,自然连接是只对存在同名字段的元组进行连接。

所有水手预订的船只: S a i l o r s ⋈ R e s e r v e s ⋈ B o a t s Sailors\Join Reserves\Join Boats SailorsReservesBoats

除并不是基本操作,虽然可以用操作符 ∖ \setminus 表示,但实际上除是由其它操作定义的。考虑两个关系实例 A A A B B B A A A 有且仅有字段 x x x y y y,而 B B B 只有一个字段 y y y A ∖ B A\setminus B AB 定义为满足如下条件的 x x x 的集合,对于 B B B 中每个元组 y y y,在 A A A 中都有一个元组 < x , y > <x, y> <x,y> 与之对应。

A ∖ B A\setminus B AB 定义为: π x ( A ) − π x ( ( π x ( A ) × B ) − A ) \pi{_x}(A) - \pi{_x}((\pi{_x}(A) \times B) - A) πx(A)πx((πx(A)×B)A)

参考资料

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

你可能感兴趣的:(数据库)