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
操作可以组合,先筛选再投影
Cartesian-Product (笛卡尔积)
dikaer.png用✖️表示, r1 中的每一行分别对应 r2 中的每一行。如果 r1 有8个元组, r2 有9个元组。做笛卡尔积后得到 72 个元组。
Join
join.pngjoin 等价于两个关系先做笛卡尔积然后再根据条件筛选
集合操作(并、交、差)
union(∪)并集
union.png
intersection(∩)交集
set-difference(-) 差集
差集求的是在第一个集合里面且不在第二集合里面的元组
Assignment (<-)中间结果可赋值到一个变量
variable.png重命名
rename.png将关系 E 重命名为 x。
应为 join 等操作等会出现重复字段, 一个表也可以和自身 join。为了区分左右两边的关系或重名的字段需要重新起一个名字。 SQL 中用 as 实现。
一个SQL 查询语句会先解析成关系代数表达式,而后用关系代数运算,最后才生成具体的查询步骤。
网友评论