关系代数

2020-02-21  本文已影响0人  lesliefang

Database System Concepts 7th 第2章学习

关系型数据库以集合论,谓词逻辑为基础
SQL 以关系代数(Relational Algebra)为基础

一个关系(relation)对应数据库的一张表(table)
一个关系是多个元组(tuple)的集合,一个元组对应数据库一个表的一行
一个元组由一系列属性(attribute)组成,一个属性对应数据库一个表的一列

模式(schema)是关系的逻辑表示
department (id, dept_name, building, budget)

数据实现并不严格遵守关系理论,因为关系是集合,集合中不能有重复元素。而数据库中的一个表可以有重复的行。

superkey(超键):能唯一标识一个关系中元组的一个或多个属性
candidate keys(候选键):不能再分的 superkey
primary key (主键):候选键可能有一个或多个,选出来一个作为主键

对于 department, 假设 id 不重复,dept_name 不重复,id 是 超键, dept_name 也是 超键, (id, dept_name) 合在一起也是 超键。
但只有 id, dept name 是候选键。 我们可以选择其中一个作为主键。

Relational Algebra(关系代数)

关系代数描述关系的运算,对关系执行操作可以生成新的关系。

Select :
select1.png

选择符号是希腊字母读作 sigma
选择操作相当于SQL中的 where。从关系 instructor 中选出 dept_name 等于物理系的元组。

Project:(投影)
project.png

操作符读作(派)
只返回部分属性,相当于SQL中的 select

Composition.png

操作可以组合,先筛选再投影

Cartesian-Product (笛卡尔积)
dikaer.png

用✖️表示, r1 中的每一行分别对应 r2 中的每一行。如果 r1 有8个元组, r2 有9个元组。做笛卡尔积后得到 72 个元组。

Join
join.png

join 等价于两个关系先做笛卡尔积然后再根据条件筛选

集合操作(并、交、差)

union(∪)并集


union.png

intersection(∩)交集
set-difference(-) 差集
差集求的是在第一个集合里面且不在第二集合里面的元组

Assignment (<-)中间结果可赋值到一个变量
variable.png

重命名

rename.png

将关系 E 重命名为 x。
应为 join 等操作等会出现重复字段, 一个表也可以和自身 join。为了区分左右两边的关系或重名的字段需要重新起一个名字。 SQL 中用 as 实现。

一个SQL 查询语句会先解析成关系代数表达式,而后用关系代数运算,最后才生成具体的查询步骤。

上一篇下一篇

猜你喜欢

热点阅读