《数据库系统》期末复习笔记
《数据库系统》期末复习笔记
记记
期末复习的时候对课本进行了系统的整理,现在发上来希望能对大家有用www
正文正文
第第1章章 引言引言
数据库系统由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据的集合通常称作数据库。
DBMS的主要特性
1) 数据访问的高效和可扩展性
2) 缩短应用开发时间
3) 数据独立性(物理数据独立性/逻辑数据独立性)
4) 数据完整性和安全性
5) 并发访问和鲁棒性(故障恢复)
数据抽象
a) 物理层:最低层次的抽象,描述数据实际上是怎样存储的
b) 逻辑层:描述数据库中存储什么数据及这些数据间存在什么关系。这样逻辑层就通过少量相对简单的结构描述了整个数据
库。虽然逻辑层的简单结构的实现可能涉及复杂的物理层结构,但逻辑层的用户不必知道这样的复杂性。这称作物理数据独立
性。
c) 视图层:只描述整个数据库的某个部分。应用程序能够隐藏数据类型的详细信息。视图也可以出于安全目的隐藏数据信
息。
实例和模式:特定时刻存储在数据库中的信息的集合称作数据库的一个实例。而数据库的总体设计称作数据库模式。
物理模式在物理层描述数据库的设计,逻辑模式:在逻辑层描述数据库的设计。
数据独立性:修改一层的结构定义不影响更高层的结构定义
物理数据独立性:修改物理结构而不需要改变逻辑结构。应用程序不依赖于物理模式,独立于数据的结构和存储。
逻辑数据独立性:数据逻辑结构的改变不影响应用程序(难以实现,因为应用程序严重依赖于数据的逻辑结构)
数据库结构的基础是数据模型。数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。数据抽象
的不同层次需要不同的数据模型来描述。
数据库设计步骤:
(1) 需求分析
(2) 概念数据库设计
(3) 逻辑数据库设计
(4) 结构优化
(5) 物理数据库设计
(6) 创建并初始化数据库&安全设计
实体-联系数据模型使用一组称作实体的基本对象,以及这些对象间的联系。
事务管理:ACID:Atomicity (原子性), Consistence (一致性), Isolation (隔离性), Durability (持久性)
并发控制管理器:控制并发事务之间的交互。
数据库系统的功能部件大致可分为存储管理器和查询处理部件
存储管理器:在底层数据存储与应用程序及查询之间,提供接口
查询处理器:接受数据库语言输入,经过解析、优化、执行,输出相应结果给用户。
第第2章章 关系模型介绍
关系模型介绍
2.1关系数据库的结构
关系数据库的结构
关系数据库由表的集合构成,每个表有唯一的名字。表中的一行代表了一组值之间的一种联系。关系指代表,元组指代行,属
性表示列。元组的每一个分量都是原子值。关系是笛卡尔积的子集。对每个属性都存在一个允许取值的集合成为该属性的域。
如果域中元素被看做是不可再分的单元,则域是原子的。
关系和表的区别:a.在数学上,关系可以是无限的。b.表的属性没有次序,数学上关系列有序。
对关系进行限制:a.令关系元组数目有限 b.赋予关系的列属性名,取消属性之间的次序。 对关系进行限制后,关系=表。
关系的基本特征:行无序,列无序,行不同,列同质,不同列可出自同一域,分量的原子性。
空值的含义:表示值未知或不存在。
2.2 数据库模式
数据库模式
关系模式由属性序列及各个属性对应域组成。模式(大写)下可以定义关系变量(小写)。不同关系中的属性名可以相同。
2.3 码码
超码(superkey)
是一个或多个属性的集合,这些属性的集合能够唯一的表示一个关系中的一个元组。
如果K是一个超码,那么K的任意超集也是超码。
候选码(candidate key)
任意真子集都不能成为超码的最小超码。
主码(primary key)
制定一个候选码作为关系的主码。应稳定、不易修改、切合主体。(加下划线)
码是对关系模式的约束。确定原则:要按照现实世界语义约束定义、不能依据对数据的归纳总结定义。
外码(foreign key)
一个关系模式(r1)可能它的属性中包含另一个关系模式(r2)的主码,这个属性在r1上称作参照r2的外码。关系r1称为外码依
赖的参照关系,r2叫做外码的被参照关系。
外码是关系模式的约束,要按照现实世界语义约束定义外码。参照关系和被参照关系可以是同一个表。
参照完整性约束:要求在参照关系中任意元组在特定属性上的取值必然等于被参照关系中某个元组在特定属性上的取值。
2.4 模式图(
模式图(schema diagram))
一个含有主码和外码依赖的数据库模式可以用模式图来表示。
第第3章章 SQL
3.1 SQL查询语言概览
查询语言概览
DDL(数据定义语言)create/drop/alter
DML(数据操纵语言)select/delete/insert/update
DCL(数据控制语言)grant/revoke
事务管理语句:commit/rollback
3.2 SQL数据定义
数据定义
基本类型
基本类型:
字符型:char(n),varchar(n)
数字类型:int,smallint,long,numeric(m,n),real,double,precision,float(n)
日期时间型:date,time,timestamp(datetime)
基本模式定义:
基本模式定义:
(1) create table
create table s
(sno char(2),
sname varchar(8) not null,
sage int ,
primary key(sno),
check(sage between 16 and 30)
);
Primary key(A,A,A)声明主码(实体完整性),必须非空且唯一
Foreign key(A,A,A) references r:声明外码(参照完整性)
Check(条件) 用户自定义完整性
Not null:非空约束
(2) alter table
为已有关系增加或删除属性
Alter table r add A D;所有元组在新属性上的取值为空
Alter table r drop A;
(3)drop table r;
不仅删除r的所有元组,还删除r的模式。无法恢复。
DDL 与事务无关,create/alter/drop不受commit/rollback的影响
(4)索引的创建
Create (unique) index s1 on s(sno);
Drop index s1;
3.3 SQL查询的基本结构
查询的基本结构
Select A1,A2,A3,…,An from r1,r2,…,rn where P
(1) select子句
由于每个元组的rowid不同,所以默认重复,除非使用distinct
Select distinct a1,a2 强行删除重复
Select all a1,a2 显示表明不去除重复
Select * 选择全部属性
允许±×/等算术表达式
(2)where子句
P为算术表达式
可以包含<,,>=,(比较运算符),and,not,or(逻辑连词),between(比较运算符)
Age (not) between 18 and 20
(3)from子句
相当于笛卡尔积,不是自然连接——natural join
Select name,course_id from instructor natural join teaches;
Join…using(属性) 由用户指明那些列相等
Select name,title from (instructor natural join teaches) join course using(course_id);
3.4 附加的基本运算
附加的基本运算
(1)更名运算
旧名 as 新名,属性和表均可以更名,as可以省略
表更名相当于声明了元组变量,没有更名的表可以看做是声明与表同名的元组变量。
(2)字符串操作
模式匹配操作like
Addr like ‘%济南%’
%:匹配任意子串
’intro%’匹配任何以intro打头的字符串,’%comp%’匹配任何包含comp的字符串
:匹配任意一个字符
‘__’匹配只含有三个字符的字符串
‘___%’匹配至少含三个字符的字符串
Upper(s)将字符串s转化为大写 lower(s)将字符串s转化为小写
Trim(s)去掉字符串后面的空格
\为转义字符,放在特殊字符前面使之成为普通字符
Like ‘ab%cd%’ 匹配以ab%cd开头的字符串
(3)排列元组的显示次序
Order by默认升序asc,desc为降序,多属性排序的处理:字典顺序。
只是显示次序排序,只能是sql的最后一个子句
3.5集合运算
集合运算
(默认去重,使用all则强制按照多重集进行运算,保留重复)
·并运算 (select pid,sname from s) union (select pid,tname from t);
·交运算 intersect
·差运算 except
3.6 空值空值
空值为关系运算带来了特殊的问题。在算术运算中,任意输入为空则算术表达式的结果为空。比较运算中将涉及空值的结果视
为unknown。布尔运算中,and:true and unknown = unknown, false and unknown = false, unknown and unknown =
unknown;or:true or unknown = true, false or unknown = unknown, unknown or unknown = unknown;not:not unknown
= unknown;
利用is null 对空值进行判断。为空返回true,否则返回false
聚集函数中的null:聚集函数的输入集合中忽略null,当作用于空集合时,count(∅)=0,其他均返回null;
3.7 聚集函数
聚集函数
平均值avg() 最小值min() 最大值max() 总和sum() 计数count()
默认作用于多重集,强制作用于集合使用distinct
无分组使用聚集函数则返回一个关系(有且只有一行),select子句中出现聚集函数,不能同时出现非聚集的属性。
分组聚集:group by 子句
在group by子句中的所有属性上的取值相同的元组将被分在一个组中。
需要保证:任何没有出现在group by中的属性如果出现在select子句中,只能出现在聚集函数内部。
Having 子句中的谓词在形成分组后才起作用,对分组进行检查.
任何出现在having子句中但是没有被聚集的属性必须出现在group by中。
顺序:from -> where -> group by -> having -> select -> order by
3.8 嵌套子查询
嵌套子查询
(1)in:∈
1.枚举集合 where cno in (‘c1’,’c2’,’c3’)
2.子查询,tuple in (select …) 测试元组是否是集合中的成员
求哪些学生没有学哪些课?
Select sno,cno
From s,c
Where (sno,cno) not in
(select sno,cno from sc);
(2) exists:
判断子查询元组的存在性,子查询中select什么内容并不重要,只要返回为真
求学了c1的学生
① select * from s
where sno in
(select sno from sc where cno=‘c1’);
② select * from s where exists
(select * from sc
where sc.sno=s.sno and cno=‘c1’);
③ select s.* from s,sc
where s.sno=sc.sno and cno=‘c1’;
求没有学c1的学生
① select * from s
where sno not in
(select sno from sc where cno=‘c1’);
②select * from s
where not exists
(select * from sc
where sno=s.sno and cno=‘c1’);
(3) 全部概念的处理
1.超集superset:B是A的子集
– not exists (B except A)
求学了全部课程的学生
select sno from s
where not exists
((select cno from c)
except
(select cno from sc
where sc.sno=s.sno))
2.关系代数:÷
– not in(not in)
select sno from s
where sno not in//减去没有学全部课的
(select sno
from s,c
where (sno,cno) not in
(select sno,cno from sc))
3.关系演算: 任意
– not exists(not exists)
select sno from s
where not exists
(select * from c
where not exists
(select * from sc
where sc.sno=s.sno
and sc.cno=c.cno))
(4) 集合比较
Some( r ) 关系中的某一个元组
至少比某一个大 >some
=some等价于in
some不等价于not in
All® 关系中所有的元组
大于all 比所有的都大
all 等价于not in
=all 不等价于 in
(5) 重复元组unique
Unique判定是否有重复元组,不能判定是否只有一个元组,返回bool值
求各门课程成绩均不相同的学生
select * from s
where unique
(select score
from sc
where sc.sno=s.sno)
(6) with子句
提供定义临时关系的方法,这个定义只对包含with子句的查询有效
With max_budget(value) as
(select max(budget) from department)
Select budget
From department,max_budget
Where department.budget=max_budget.value;
(7) from子句中添加子查询
把查询的结果关系用在from子句中,
Select …
from (select …
from …
where …
group …
having …)
as r(A1,A2…)
where …
group by …
having …
3.9 数据库的修改
数据库的修改
(1)删除 delete from r where P
此处的from只能作用于一个关系,但是子句中的嵌套语句可以使用多个
(2)插入 insert into r values(v1,v2,v3);
(3)更新 update r set x=x where P;
Update r set (A1,A2,…)=(select …) where p;
第四章第四章 中级中级SQL
4.1 连接表达式
连接表达式
连接类型:inner\left outer\right outer\full outer
连接条件:natural\using(使用同名属性)\θ连接(on)等价于where
任意组合
1.on条件
Select * from student join takes on student.ID=takes.ID
但是id属性会出现两次,利用投影所需属性来只显示一次
2.外连接——通过在结果中创建包含空值元组的形式,保留在连接中丢失的元组
·左外连接(left outer join) 只保留出现在左外连接运算之前的关系中的元组
·右外连接(right outer join)只保留出现在右外连接运算之后的关系中的元组
·全外连接(full outer join)保留出现在两个关系中的元组
Inner join为不保留未匹配元组的连接运算。
4.2 视图视图
Create view vname(a1,a2,…) as
Select …
视图不是逻辑模型的一部分,但是作为婿关系对用户可见的关系是视图。
视图和with相比:视图存储在DB数据字典中宏,是数据库模式的一部分;with定义的派生关系,仅在所属sql有效,不属于DB
模式
视图和表相比:视图和表都是关系,都可以在sql直接应用。Db存储表的模式定义和数据,但只存储视图的定义,不存视图的
数据。视图数据在使用视图时临时计算,物化视图是提高计算的一种手段。
视图的作用:对外模式的支持,安全性、方便性。
视图可更新的条件:
·from子句中只有一个数据库关系
·select子句中只包含关系的属性名,不包含任何表达式、聚集、distinct操作
·任何没有出现在select子句中的属性可以取空值;即这些属性上没有not null约束,也不构成主码的一部分。
·查询中不含有group by或having语句。
视图更新后的数据可能不符合视图的where子句,可以使用with check option来拒绝不满足视图的where子句的插入操作。
视图不可以递归定义
4.3 事务事务
事务对DDL语句无作用,主要用于DML语句。
Commit work/rollback work
一个事务或者在完成所有步骤后提交其行为,或者在不能成功完成其所有动作的情况下回滚其所有动作,通过这种方式体现事
务具有原子性。
4.4 完整性约束
完整性约束
1.DBMS保证数据库数据满足完整性约束,拒绝破坏完整性约束的数据修改要求
2.分类:实体完整性——主码非空、唯一,定义了主码系统自动保证
参照完整性——外码,系统自动保证参照完整性
用户自定义完整性——根据语义约束,用户自定义:not null,unique,check ,assertion
3.not null——非空约束,指定的属性上不允许出现空值
任何试图导致某非空属性为空的操作都将被拒绝
4.unique(A1,A2,…)——不允许有两个元组在指定的属性组上取值相同
Unique本身不限定属性非空
5.check P
关系上的每一个元组,都必须满足P,可以针对一个或多个属性。
6.foreign key外码约束
一个关系模式(r1)可能它的属性中包含另一个关系模式(r2)的主码,这个属性在r1上称作参照r2的外码。关系r1称为外码依
赖的参照关系,r2叫做外码的被参照关系。
参照完整性约束:
外码值与被参照关系中某元组主码的值相同
或
外码为空
定义 foreign key (dno) references depe(dno)
对参照关系的insert和update需要进行参照完整性检查
对被参照关系delete和update需要进行检查
对被参照关系进行delete操作,参照关系中有元组外码等于要删除元组主码值时:
三种处理方式:①拒绝删除(默认)②级联删除③外码置空
对被参照关系进行update操作,参照关系中有元组外码等于oldvalue时:
三种处理方式:①拒绝修改(默认)②级联修改③外码置空
7.断言assertion
定义在数据库上的约束,不是关系模式的定义元素
Create assertion check§
4.6 授权授权
1.权限的授予和收回
Select, update, delete, insert 针对关系或属性的权限。没有关于元组的权限
Grant
On
To (with grant option)令其拥有转授权
Revoke
On
To
转授权人的权利被收回时,其转授的权利随之被收回。
2. 角色
每个数据库用户被授予一组他有权扮演的角色。权限可以授予给角色,给人授予权限
Create/drop role rolename
Grant/revoke role to/from user ;
数据库系统的身份标识分为用户user和角色role
用户和角色的关系:
·连接使用数据库,必须以一个特定的用户身份
·不能使用role身份直接连接使用数据库
·一个用户可同时具备多个角色
·一个角色可以为多个用户拥有
·角色可以拥有角色
·角色拥有关系可以传递
·权限可以授予用户或者角色
·用户拥有授给本用户的所有权利,以及本用户具有的角色的所有权利
4.5 SQL的数据类型和模式
1.字符、数字、日期时间型
日期类型的运算
Cast ‘2001-01-31 10:29:30.52’ as timestamp//将字符串转化为时间类型
Extract (year from Vdatetime)//从date或time值中提取单独的域
Date1-date2= //两日期之间间隔的天数
2.用户自定义类型
独特类型:create type Dollars as numeric(12,2)
结构化数据类型:create type person(pid char(18),name varchar(8));
可以drop type和alter type
用户自定义域:create domain Dollars as numeric(12,2) not null;//可以声明完整性约束。
Type是强类型,domain不进行强类型检查,支持强制类型转换。
3.创建索引 create index xx on r(S);
4.大对象类型
字符类型的大对象数据类型clob,二进制数据的大对象数据类型blob。
存储实现方式为指针+文件
Select Bolb doc into 变量(将指针赋给变量)
From book
Where cno=’c1’;
数据库的doc中存的是指针
5.模式、目录和环境
一个DBMS可以管理多个catalog/instance/database
一个instance可以含多个schema
一个schema含多个关系table/view
访问数据库必须使用连接,catalog.schema.rname
每个用户可以拥有自己的schema前提是有权限。
第六章第六章 形式化关系查询语言
形式化关系查询语言
6.1 关系代数
关系代数
6.1.1 基本运算
基本运算 σΠ∪--×ρ
σ 选择 (等同于SQL中的where)
右下角为条件,括号内为关系σθ(E),行操作,只涉及一个关系。
允许在选择谓词中进行比较,=、、<,,>=,和,且,非
Π 投影(SQL中的select)
选择属性,即列操作,自动去重。下标有序,可以利用投影改变列的顺序。
∪并
二元关系运算,自动去重。并的两个关系必须相容:关系r和s必须是同元的,即他们的属性数目必须相同。对应列同域。但是
不要求对应列同名。
-差运算
r-s表示所有在r而不在s中的元组的关系。同样要求相容。
投影和并可以分配,投影和差不可分配。
Πpid,name(S∪T)≡Πpid,name(S) ∪ Πpid,name(T)
Πpid,name(S-T)≠Πpid,name(S) – Πpid,name(T)
×广义笛卡尔积
用于关系的连接,重名属性要加关系限定,注意运算顺序以提高效率(使更少的元素做×)
ρ更名
给关系表达式和属性命名
ρχ(E) 返回表达式E的结果,并把名字x赋予了他
ρχ(a1,a2,…)(E) 返回表达式E的结果,并赋给名字x,同时将各属性进行更名。
例题:
求最高工资——将纵向比较改为横向比较
非最高工资:Πinstructor.salary(σinstructor.salary
右下角同时也可以进行更名
一个关系中只有一个元素的话,SQL可将之看做单值属性,但是关系运算则不可
6.2 元组关系演算
元组关系演算
形式化定义:
原子公式
·s∈R:s是关系R中的一个元组
·s[x] θ u[y]:S[x]与u[y]为元组分量,它们之间满足比较关系
·s[x]θ c:分量s[x]与常量c之间满足比较关系
公式的递归定义
·原子公式是公式
·如果P是公式,那么┑P和§也是公式
·如果P1 , P2是公式,则P1∧P2 , P1∨P2 , P1=>P2也是公式
·如果P(t)是包含自由元组变量t的公式,且r是关系,则存在t∈r (P(t))和任意t∈r (P(t)) 也是公式
{t | P(t) } 所有使P谓词为真的元组t的集合,t[A]表示元组t在属性A上的值。t∈r表示元组t在关系r中
T只定义在ID属性上,因为这一属性是对t进行限制的条件所涉及的唯一属性,结果得到id上的关系。
笛卡尔积的表示:两个存在作and
有可能会产生无线关系的表达式是不安全的,引入P的域dom ( P )表示:
·显式出现在P中的值,以及在P中出现的关系中分量值的集合
·公式的域是指的集合,不强调值“同类型”
如果出现在表达式{t | P(t) }结果中所有值均来自dom§则称该表达式是安全的。
找出所有选了生物系全部课程的学生
他是所有满足如下条件的学生(即ID上的元组t)的集合:对关系course中所有的元组u,如果u在dept_name属性上的值
是“biology”那么在关系take中一定存在一个包含该学生ID以及该课程course_id的元组
数据库设计和E-R模型模型
第第7章章 数据库设计和
7.1 设计过程概览
设计过程概览
数据库设计:概念模型设计、逻辑模型设计、物理模型设计
E-R图的位置:数据分析、描述的工具,用于概念模型设计
E-R图的作用:帮助澄清用户数据需求,分析员和用户对数据需求达成高度一致;数据逻辑模型设计的基础
E-R图的要求和评价标准:清晰、易懂,完整、精确、无二义