数据库笔记(一)关系数据库

发布于 / 笔迹 / 3 条评论

关系代数是以关系为运算对象的一组高级运算的集合。由于关系定义为属性个数相同的元组的集合,因此集合代数的操作就可以引入到关系代数中。


导图


关系模型基本概念

关系及基本术语

  • 关系(Relation):一个关系对应通常说的一张表。
  • 元组(Tuple):表中的一行即为一个元组。
  • 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称,即属性名。
  • 元数(Arity):关系中的属性个数。
  • 基数(Cardinaliity):元组个数。

关键字

能唯一表示表中每一个记录的一个或多个字段的最小组合称为关键字

  • 超关键字(Super Key):在关系中能唯一标识元组的属性集合。一个关系所有属性的集合为该关系本身的超关键字。
  • 候选关键字(Candidate Key):如果某一属性集合是超关键字,但去掉其中任意属性后就不再是超关键字,这样的属性称为候选关键字。
  • 主关键字(Primary Key):如果关系中存在多个候选关键字,用户可选作元组标识的一个候选关键字为主关键字。
  • 外部关键字(Foreign Key):关系R中的某个(些)属性K不是R的候选关键字。而是另一关系S的候选关键字,则称K为R的外部关键字、

候选关键字的诸属性称为主属性,不包含在任何候选关键字中的属性称为非主属性。

关系模式

关系的描述称为关系模式,形式化表示为R(U,D,DOM,I, F),其中R为关系名,U是组成该关系的属性名集合,D是U中属性的域,DOM为属性到域的映像集合,I为完整性约束集合,F为属性见数据的依赖关系集合。

通常关系模式简记为R(A1,A2,…Ak),R为关系名,A1,A2,…Ak为属性名,并指出主关键字。

例如学校教学模型中:

  • 学生关系模式S(S#, SNAME, AGE, SEX)
  • 课程关系模式C(C#, CNAME, TEACHER)

关系模型的完整性

关系模型中有四类完整性约束:域完整性约束、实体完整性约束、参照完整性约束用户定义完整性约束。(有资料也说三种[加粗部分],我们先搁置争议)

  • 域完整性约束:属性值必须取自值域,一个属性能否为空值由其语义决定。
  • 实体完整性约束基本关系的所有主属性都不能取空值,并非主属性整体不能取空值。
  • 参照完整性约束:如果属性集K是关系R的主关键字,K也是关系S的外关键字(关系R和S不一定是不同的关系),那么在关系S中,K的取值只能为空值或者等于关系S中某个主关键字的值。
  • 用户定义完整性约束:在不同的应用环境中针对某个具体关系数据库的约束条件,如大学生年龄的限制为18~22岁。

关系

③关系数据库的数据操纵语言(DML)的语句分成查询语句和更新语句两大类。查询语句用于描述用户的各种检索要求;更新语句用于描述用户迚行插入、删除、修改等操作。

④关系查询语言根据其理论基础的不同分成两类:关系代数语言:查询操作是以集合操作为基础的运算;关系演算语言:查询操作是以谓词演算为基础的运算。

【关系代数中的操作可以分为两类】:

  • 传统的集合操作,并、差、交、笛卡尔积(乘)、笛卡尔积的逆运算(除)
  • 扩充的关系操作,对关系进行垂直分割(投影)、水平分割(选择)、关系的结合(连接、自然连接)等。

关系代数的五个基本操作

并、差、笛卡尔积、投影、选择

设有关系R与S

  • R:
A B C
1 2 3
4 5 6
7 8 9
  • S:
A B C
1 2 3
2 4 8

并(Union)

设关系R和S具有相同的关系模式:R和S的并是由属于R或属于S的元组构成的集合,记为RUS

R∪S≡{t│t∈R∨t∈S},t是元组变量,R和S的元数相同。

  • R∪S
A B C
1 2 3
4 5 6
7 8 9
2 4 8

差(Except)

设关系R和S具有相同的关系模式:R和S的差是由属于R但不属于S的元组构成的集合,记为R–S

R-S≡{t│t∈R∧t∈S}

  • R-S
A B C
4 5 6
7 8 9

笛卡儿积(Cartesian product)

设关系R和S的元数分别为r和s,定义R和S的笛卡儿积是一个(r+s)元的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组,记为R×S

R×S≡{t|t=<ti1,……,tim>∧<t1,……,tk>∈R}

  • R×S
A B C A B C
1 2 3 1 2 3
1 2 3 2 4 8
4 5 6 1 2 3
4 5 6 2 4 8
7 8 9 1 2 3
7 8 9 2 4 8

投影(Projection)

定义:投影操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。
设关系R是k元关系,R在其分量Ai1,……,Aim上的投影用∏i1,……,im(R)表示,它是一个m元的元组的集合。

∏i1,…,im(R)≡{t|t=<ti1,……,tim>∧<t1,……,tk>∈R}

  • ∏A,C(R)
A C
1 3
4 6
7 9

选择(Slection)

定义:选择操作是根据某些条件对关系进行水平分割,即选取符合条件的元组。条件可用命题公式F表示。

F中有两种成分:

  • 运算对象:常数(用引号括起来)、元组分量(属性名戒列的序号)。
  • 运算符:算术比较运算符(<,≤,>,≥,=,≠)、逻辑运算符(∧,∨,¬)

关系R关于公式F的选择操作用σF(R)表示,定义如下:

  • σF(R)={t|t∈R∧F(t)=true}
  • σ为选择运算符,σF(R)表示从R中挑选满足公式F为真的元组所构成的关系。
  • σ(A>3)(R)
A B C
4 5 6
7 8 9

关系代数的四个组合操作

交、连接、自然连接、除

交(Intersection)

关系R和S的交是由属于R又属于S的元组构成的集合,记为R∩S,要求R和S定义在相同的关系模式上。

R∩S≡{t|t∈R∧t∈S},R和S的元数相同

R∩S=R-(R-S),或R∩S=S-(S-R)

  • R∩S
A B C
1 2 3

连接(Join)

定义:关系的连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件(比较关系Θ)的元组,也称Θ连接。

连接运算中有两种常用连接:等值连接和自然连接。

  • 等值连接(equijoin)

当Θ连接中的Θ为“=”时,Θ连接称为等值连接,它不要求参加操作的两个关系有同名属性。

自然连接(Natural join)

自然连接是一种特殊的等值连接(Θ为“=”)。它要求两个关系中进行比较的分量必须是同名的属性组(即两个关系至少具有一个相同的属性),并且在结果中把重复的属性列去掉。自然连接记为R∞S

给定关系R与S

  • R
A B C
a b c
b a f
c b d
  • S
D C
b f
e d
  • 等值连接
A B R.C D S.C
b a f b f
c b d e d
  • 自然连接(消除重复列)
A B C D
b a f b
c b d e

除(Divison)

设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中

除操作是同时从行和列角度进行运算。

假设有关系R(X, Y)和S(Y),S⊆R,X, Y为属性组,S(Y)≠Φ,则关系R和S的除法运算记为R÷S。

R÷S = ∏X(R) - ∏X(∏X(R)×S-R)

例,给定两个关系R和S,如表所示。查询所有向仓库号为WH1、WH3以及WH5提供零件的供应商编号。

  • R
仓库号 供应商号
WH1 S1
WH1 S2
WH1 S3
WH2 S3
WH3 S1
WH3 S2
WH5 S1
WH5 S2
WH5 S4
WH6 S2
  • S
仓库号
WH1
WH3
WH5

解析:题目即求R÷S。

  • 第一步,先计算∏X(R),如表。
供应商号
S1
S2
S3
S4
  • 第二步,计算∏X(R)×S,如表。
仓库号 供应商号
WH1 S1
WH1 S2
WH1 S3
WH1 S4
WH3 S1
WH3 S2
WH3 S3
WH3 S4
WH5 S1
WH5 S2
WH5 S3
WH5 S4
  • 第三步,计算∏X(R)×S-R,如表。
仓库号 供应商号
WH1 S4
WH3 S3
WH3 S4
WH5 S3
  • 第四步,计算∏X(∏X(R)×S-R),如表。
供应商号
S3
S4
  • 第五步,计算∏X(R)-∏X(∏X(R)×S-R),如表。
供应商号
S1
S2

关系代数表达式优化

在关系代数表达式中,最花费时间和空间的运算是笛卡儿积和连接操作。为此,引出三条启发式规则,用于对表达式进行转换,以减少中间关系的大小。

  • 尽可能早地执行选择操作
  • 尽可能早地执行投影操作
  • 避免直接做笛卡儿积,把笛卡儿积操作之前和之后的一连串选择和投影合幵起来一起做。

通常选择操作优先于投影操作比较好,因为选择操作可能会大大减少关系,幵且选择操作可以利用索引存取元组。

关系代数表达式的启发式优化是由DBMS的DML编译器完成的。对一个关系代数表达式进行语法分析,可以得到一棵语法树,树中叶子是关系,非叶子结点是关系代数操作。

练习题

单项选择题




填空题


设计题

设教学数据库中有四个关系:

  • 教师关系T(T#,TNAME,TITLE)
  • 课程关系C(C#,CNAME,T#)
  • 学生关系S(S#,SNAME,AGE,SEX)
  • 选课关系SC(S#,C#,SCORE)

试用关系代数表达式表示下列查询语句:

(1)检索年龄小于17岁的女学生的学号和姓名。
(2)检索男学生所学课程的课程号和成绩。
(3)检索男学生所学课程的仸课教师的工号和姓名。
(4)检索至少选修两门课程的学生学号。
(5)检索至少有学号为S2和S4学生选修的课程的课程号。
(6)检索WANG同学不学的课程的课程号。
(7)检索全部学生都选修的课程的课程号和课程名。
(8)检索选修课程包含LIU老师所授全部课程的学生学号。

设教学数据库有三个关系:

  • 学生关系S( s#, sname, age, sex ) (学号,姓名,年龄,性别)
  • 成绩关系SC(s#, c#, grade) (学号,课程号,教师名)
  • 课程关系C(c#, cname, teacher) (课程号,课程名,教师名)

试用关系代数表达式表示下列查询:

(1)查询WANG老师所授的课程号、课程名。
(2)查询学习了WANG老师所授课程的女学生的学号与成绩。
(3)查询学号为9801001学生所学课程与任课老师名。
(4)查询至少学习了WANG老师与ZHANG老师所授课程的学生学号与姓名。
(5)查询全部学生都选修的课程的课程号与教师。
(6)查询至少学习了课程号为“C2”和“C4”的学生学号。
(7)查询学习了所有课程的学生姓名。

累了,不写了。我好像写完了!感谢主席指出一处错误,感谢北辰指出一处错误。


参考资料

  • 数据库系统概论[王珊,萨师煊]
  • 数据库原理与应用[刘亚军,高莉莎]
  • 数据库原理与应用[刘先锋]
  • 关系运算

To be continued.
2018-01-06 星期六
The end.
2018-01-09 星期二
The real end.
2018-01-12 星期五

转载原创文章请注明,转载自: 太傅 » 数据库笔记(一)关系数据库
  1. TaiFu_S

    码字不易,且看且珍惜。?

  2. CongTsang

    不看不看,粘贴复制,就是干

    1. TaiFu_S
      @CongTsang

      不看就挂了!哪里复制粘贴了!纯手工!