数据库系统概论复习重点

 

                                                                                                               第一章 绪论

1.1 数据库的4个基本概念

    数据(data):描述事物的符号记录称为数据,数据是数据库中存储的基本对象。

    数据库(DataBase):数据库是长期存储在计算机内,有组织的,可共享的大量数据的集合。

    数据库管理系统(DataBase Management System):数据库管理系统是位于用户与操作系统之间的一层数据管理软件,包含数据定义功能,数据组织,存储和管理,数据操纵功能,事务管理和运行管理,数据库的建立和维护等功能。

    数据库系统(DataBase System):数据库系统是由数据库,数据库管理系统,应用程序和数据库管理员组成的存储,管理,处理和维护数据的系统。

1.2 数据库技术的产生和发展

    1.人工管理阶段:数据不共享冗余度极大,数据不独立完全依赖程序。

    2.文件系统阶段:数据可以长期保存并由文件系统管理数据,但数据共享性差,冗余度大,数据独立性差。

    3.数据库系统阶段:共享性高,冗余度小,具有高度的物理独立性和一定的逻辑独立性,由数据库管理系统提供数据安全性,完整性,并发控制和恢复能力。

1.3 数据模型

    数据模型通常由数据结构,数据操作,数据的完整性约束条件三部分组成。

1. 实体:客观存在并且相互区别的事物,例如:一个学生,学生的一次选课

2. 属性:实体所具有的某一特性,例如学生的成绩

3. 码:唯一标识实体的属性集,例如学号是学生实体的码

4. 实体型:用实体名及其属性集合来抽象和刻画同类实体,例如学生(学号,姓名,性别.......等)

5. 概念模型的表示方法:E-R图

6. 信息世界抽象出概念模型,机器世界根据概念模型得到数据模型

7. 数据模型:由数据结构,数据操作,数据完整性约束条件组成

8. 关系模型的数据结构:

关系:即我们说的一张表(不允许表内部还有表)

元组:表的一行

属性:表的一列

码:唯一确定一个元组,如学号

分量:元组中的一个属性值

关系模式:例如:学生(学号,姓名,性别,班级)

 

                                                                                                  第二章 关系数据库

一.传统的集合运算(二目运算)(以关系R和关系S为例,二者都有n个属性,并且属性取自用一个域,下同)

1.并:结果由属于R或者属于S的元组组成,但是要去除重复的元组

2.差:结果由属于R但是不属于S的所有元组组成

3.交:由既属于R又属于S的元组组成

4.笛卡儿积:域上的集合运算

总结:传统的集合运算是二目运算,包括并,差,交,笛卡儿积四种

二.专门的关系运算

1. 选择:从关系中选取使特定逻辑表达式为真的元组

2. 投影:关系R上的投影是从R中选若干属性列组成新的关系

3. 连接:从需要连接的关系的笛卡儿积中选满足条件的元组,常用的有等值连接和自然连接

4. 除:R除以S等于T

要求:T包含所有在R但是不在S中的属性和值,且T和S的笛卡儿积必须在R中

第三章 关系数据库标准语言SQL

一.查询:

1..单表查询:查询课程平均成绩大于所有同学课程平均成绩的同学的学号

select sno

from SC

group by

having avg (grade)>= all (select avg(grade)

                          from SC

  group by sno)

--在使用group by 分组的时候,where 是针对符合条件的元组的,而having是针对符合条件的分组的,该例也使用了嵌套查询

 

2. 连接查询:查询选修二号课程的同学的学号和姓名

select Student.sno,sname

from Student,SC

where Student.sno=SC.sno and con='2'

--找到课程号为2的元组,且这些元组的学号等于Student表里面的学号,然后投影这些元组的sno,sname属性

3. 嵌套查询:查询选修二号课程的同学的学号和姓名

select sno,sname

from Student

where son in (select sno

                  from SC

  where con='2')

--先在SC表里面找到课程号为2的同学的学号,然后将找到的学号传递给Student表,然后根据传递的学号在Student表中寻找该学号的学生的学号和姓名

4. exists嵌套查询:查询选修二号课程的同学的学号和姓名

select sno,sname

from Student

where exists (select *

              from SC

  where sno=Student.sno and con='2')

--先在内部循环查询课程号为2的同学是不是存在,若存在则在exists处返回True,就返回该学生元组的所有信息,然后打印该元组的sno和sname属性,若不存在则在exists处返回false,后面就不会返回元组信息

5. 双重exists嵌套查询:查询选修了所有课程的同学

select sname

from Student

where not exists (select * 

                  from Course

  where not exists (select *

                    from SC

where SC.sno=Student.sno and SC.cno=Course.cno))

--对于这个双重exists嵌套循环个人的理解是这样的:先在最内层循环寻找Course表中有的课程看SC表里面有没有同学全部选了,not exists的意思是里面没有找到就写进去,因为有两个exists,所以双重否定表肯定,意思就是写进去

三.视图:从一个或几个基本表导出的表,是虚表,视图中的数据仍然存放在基本表中,透过视图可以查看自己感兴趣的数据

视图是一个虚表,也可以通过这个表进行查询,插入,删除和修改

1.行列子集视图(一个表中截取某些行和列)

create view bt_s(sno,sname)

as 

select sno,sname

from Student

where age>=18;

2.分组视图(含有group by语句的视图)

create view s_g(sno,gavg)--括号内部是视图列名

as 

select Student.sno,avg(grade)

from Student,SC

group by Student.sno;

                       

                                                                                      第四章 数据库安全性

一.用户的创建和权限操作

1.用户的创建

create user u1 for login a

2.用户权限的操作

具体参考附带文件

(本章重点在用户的创建及对权限操作的部分)

                                                                                       第五章 数据库的完整性

1.断言:为数据库的完整性约束服务,任何使断言不为真值的操作都会被拒绝执行

例:数据库这门课程最多被60个同学选修

create assertion ASSE_SC_DB_NUM

check (60>=(select count(*)

            from Course,SC

where SC.cno=Course.cno and Course.cname='数据库');   

2.触发器:用户定义在表上的一类由事件驱动的特殊过程(具体意思请理解触发器三个字)

例:在Student表中如果插入的学生的age小于20,那么把该学生的age改为20

create trigger tri_age on Student

after insert

as

declare @age int ,@no char (12)

select @age=age,@no=sno from Student

begin

   if 

   @age<20 update Student set age=20 where sno=@no

   end;

 

                                                                                              第六章 关系数据理论

1.X->Y:X确定Y,Y依赖于X

2.函数依赖:平凡函数依赖,非平凡函数依赖,完全函数依赖,部分函数依赖

例:在关系(sno,cno,Grade)中

非平凡函数依赖:(sno,con)->Grade

平凡函数依赖:(sno,cno)->sno,(sno,cno)->cno没有包含Geade

例:X->Y,X’为X的真子集

完全函数依赖:X’不确定Y

部分函数依赖:X’确定Y

3主,非属性的区别:

主属性:包含任意一个码

非主属性:不包含任意一个码

4.范式

范式之间的关系是个同心圆,最外面是第一范式,依次往内部是二,三,BC,四范式

第一范式:属性不可再拆分

 

第二范式:非主属性对码是完全依赖

例:关系S-L-C(sno,sdept,sloc,cno,Grade),函数依赖有:(sno,cno)->Grade,sno->sdept,(sno,cno,)->sdept,snp->sloc,(sno,cno)->sloc,sdept->sloc,其中码是(sno,cno)

分析:sdept,sloc是非主属性,码中的cno确定不了这两个非主属性,即非主属性对码是部分函数依赖,所以S-L-C不是第二范式

现在我们来分析一下S-L-C,它包含有两类的非主属性,Grade与(sloc,sdept),Grade对码是完全依赖,因为sno和cno确定Geade,而(sloc,sdept)对码是部分函数依赖,所以我们分解一下:

SC(sno,cno,Grade)与SL(sno,sdept,sloc)

现在SC与SL都是属于第二范式

 

第三范式:不存在非主属性对码有传递函数依赖

例子:接着上的例子来

SL中,sno可以确定sdept,而sdept可以确定sloc,存在传递函数依赖,所以SL不是第三范式

SC中 要求sno和cno一起才能确定Grade,所以不存在传递函数依赖,所以SC是第三范式

 

BC范式:要求每一个决定因素包含码

例:在关系Y(C,B,D)中,C->B,C->D,码是C

分析:决定因素是:C->B,C->D,都包含了C,所以是每一个决定因素都包含了码,所以Y是BC范式

 

第四范式:不允许非平凡且非函数依赖的多值依赖

解析一下:就是允许非平凡且函数依赖的多值依赖(个人理解)

例子:WSC(W,S,C),W表示仓库,S表示保管员,C表示货物,W->->S,S->->C

分析;W->->S和S->->C都是非平凡的多值依赖,且码是(W,S,C),全码,不存在函数依赖,所以存在飞平凡且非函数依赖的多值依赖,所以WSC不是第四范式,现在我们来把WSC分解一下:WS(W,S)和WC(W,C),现在(W,S)中W->->S是平凡多值依赖,不存在函数依赖,所以不存在非平凡且非函数依赖的多值依赖,所以是第四范式,WC同理可得是第四范式

数据依赖的公理系统:

1.公理系统:

自反律:若Y属于X,X属于U,则X->Y

增广律:若X->Y,那么XZ->YZ

传递律:若X->Y,Y->Z,那么X->Z

2.推理规则:

合并规则:若X->Y,X->Z,那么X->YZ

伪传递规则:X->Y,WY->Z,那么XW->Z

分解规则:若X->Y,Z属于Y,那么X->Z

模式分解:

1.是否保持了函数依赖:通过分析分解之后的函数依赖,看能不能通过公理系统和推理规则推导出原来的函数依赖,如果能,则证明保持了函数依赖,否则就是没有保持

2.是否保持了无损连接的特性:

例:已知R(U,F),U={A,B,C,D,E},F={AB->C,C->D,D->E},R的一个分解为R1(A,B,C),R2(C,D),R3(D,E),证明这个分解的连接具有无损连接的特性

解答:

我们先来构造初始表

ABCDE
a1a2a3b14b15
b21b22a3a4b25
b31b32b33a4a5

构造规律:行数为函数依赖的个数,所以3行,每行代表一个函数依赖,我们以AB->C为例,这个函数依赖中有A,B,C所以第一行的这三列填a,其余填b,后面两行类似

现在开始修改表:还是以AB->C为例,这个函数依赖的右边是AB,所以我们寻找A,B列,如果有相同的分量则C列全部修改为a

修改后的表:

ABCDE
a1a2a3a4a5
b21b22a3a4a5
b31b32b33a4a5

如果修改之后某行全为a,那么该分解具有无损连接的特性

所以该分解具有无损连接的特性,证明完毕

                                                                                    第十一章 并发控制

1.封锁

排他锁(X锁):若事物T对对象A加上X锁,则只允许T读取和修改A,在T释放A上的X锁之前,其他事物不能对A加任何锁,目的是保证在事物T释放A上的X锁之前其他事物不能读取和修改A

共享锁(S锁):若事物T对对象A加S锁,则只允许T读取A而不能修改A,在T释放A上的S锁之前,其他事物只能对A加S锁,目的是保证在事物T释放对象A上的S锁之前其他事物只能读取而不能修改A

2.活锁,死锁

活锁:某一个事物一直处于等待状态,避免活锁要采取先来先服务的策略

死锁:某两个事物互相等待,永远进行下去,导致这俩个事物永远不能结束

3.可串行化调度:某个调度与串行化调度的结果一样,那么这个调度就叫做可串行化调度(正确调度)

4.怎么判断一个调度是不是可串行化调度?

冲突可串行化是可串行话调度的充分条件

冲突:不同事物对同一个数据的读写和写写操作

 ------------------------------------------------------------------------------------------------------------------------------

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值