数据库系统概论

第一章:绪论

四个基本概念

四个概念
数据:Data
数据库:DataBase
数据库管理系统:DBMS
数据库系统:DBS

打个比喻,比如说菜鸟物流:
Data:快递
DB:物流厂库
DBMS:对应整个仓库的运作情况
DBS:对应整个物流体系 宏

数据库关系系统的功能
1、数据定义功能
2、数据组织、存储和管理
3、数据操纵功能
4、数据库的事务管理和运行管理
5、数据库的建立和维护功能
6、其他功能

数据库系统的组成
1、数据库
2、数据库管理系统
3、应用程序
4、数据库管理员

数据库系统是用来存储、管理、处理和维护数据的系统

数据

Data

数据库
DBMS

数据库管理系统

DBS

数据库系统

数据库系统的组成
1、数据库
2、数据库管理系统
3、应用程序
4、数据库管理员

数据库系统是用来存储、管理、处理和维护数据的系统

发展阶段

人工

没有共享,冗余大

数据不独立,完全依赖于程序

文件系统

文件系统阶段:
数据管理者:文件系统

数据共享差、冗余度大
数据独立性差

存在操作系统中的,

数据库阶段

数据库阶段的特点:
1、数据结构化
2、数据共享性高、冗余度低且易扩充
3、数据独立性高
数据独立性包括逻辑独立性和物理独立性
4、数据由数据库管理系统统一管理和控制
DBMS的功能
(1)数据的安全性保护
(2)数据的完整性检查
(3)并发控制
(4)数据库恢复

数据模型

数据模型分为概念模型和逻辑物理模型

逻辑模型:
1、层次模型
2、网状模型
3、关系模型
4、面向对象数据模型
5、对象关系模型
6、半结构化数据模型

数据模型的组成要素
1、数据结构
2、数据操作
3、数据的完整性约束

概念模型

参考第七章

概念模型的基本概念

  • 1、实体
  • 2、属性
  • 3、码
  • 4、实体型
  • 5、实体集
  • 6、联系

实体: 是指具体的人或者事物。比如一个职工、学生、部门
属性: 比如姓名、年龄

ER图
逻辑和物理模型
层次模型

跟树形结构类似,有双亲,根节点,兄弟节点

层次模型的优点:
1、数据结构比较清晰
2、查询效率高

层次
网状模型

类似于图的结构

优点:
1、更直接地表示现实世界
2、良好的性能,存取效率高

分支主题
重点:关系模型

在第二章详细讲解

术语
1、关系
一个关系通常来说是一张表
2、元组
表中的一行
3、属性
一列是一个属性
4、码
可以唯一确定一个元组。
比如学号 能确定学生
学号和课程 可以确定成绩
5、域
是属性的取值范围
比如说考驾照的年龄设置为18-60
6、分量
元组中的一个属性值
7、关系模式
是对关系的描述,比如
学生(学号,姓名,年龄)

关系模型的最基本要求:表中无表 P26

关系模型的完整性约束:

1、实体完整性
主码唯一且非空
2、参照完整性
外码要么为空,要么在另一个表中的主码
3、用户定义完整性
自定定义的,比如年龄在12-30岁之间

分支主题
面向对象
对象关系数据模型

三级模式两级映像

外模式
也称子模式或者用户模式
一个数据库可以有多个外模式
模式
也称逻辑模型
一个数据库只有一个模式
内模式
也称为存储模式
一个数据库只有一个内模式

数据独立性:
包括物理独立性、逻辑独立性

两个独立性
逻辑独立性
当模式结构改变的时候,只要修改外模式/模式映像即可保持逻辑独立性
逻辑独立性

物理独立性
当内模式结构改变的时候,只需要修改模式/内模式映像就可以保持物理独立性
物理独立性

分支主题

数据库系统的组成

数据库系统的组成
1、硬件平台及数据库
2、软件
3、人员

人员包括
1、数据库管理员
2、系统分析员和数据库设计人员

硬件
软件
人员

第二章:关系数据库

域: 相同数据类型的集合
笛卡尔积: 是域上一种集合运算
关系
3、关系

候选码
主码
主属性

关系模式

关系模式:对关系的描述

那么什么是关系?
关系是一张表,一张二维表

关系有哪些需要描述? P41
1、关系中有哪些属性
2、这些属性来自哪些域
3、属性与域之间的映射关系

可以形象地表示为
R(U,D,DOM,F)
R:关系名
U:所有属性名
D:属性来自哪些域
DOM:属性和域的映射
F:属性间的依赖关系

关系数据库:
关系数据库也有关系数据库模式

关系操作

关系操作
插入、查询、删除、修改

其中查询操作分为:选择、投影、连接、除法、并、差、交、笛卡尔积

查询操作的基本操作:选择、投影、并、差、笛卡尔积

关系语言的分类

关系数据语言包括
1、关系代数语言
2、关系演算语言
3、具有关系代数和关系演算的SQL语言

关系代数语言

在P48 有详细的介绍

四种基本运算 P49页有详细说明

  • 1、并
  • 2、差
  • 3、交
  • 4、笛卡尔积

专门的关系运算
1、选择
2、投影
3、连接
4、除法:是用来表示全体的,比如说他都包含了,就可以被留下来

悬浮元祖 P54
R和S在自然连接中,被舍弃的元组成为悬浮元组

特殊的连接
1、外连接
2、左外连接
3、右外连接

关系演算语言

在P56页有详细说明

SQL语言

SQL的特点
1、综合统一
把定义,修改,删除,连接,安全性,完整性,事务控制,动态SQL等统一起来

2、高度非过程化
不需要过程

3、面向集合的操作方式

4、以同一种语法结构提供多种使用方式
既可以独立,也可以嵌入到Java或者C++之中

5、语言简洁,易学易用

SQL的基本概念

外模式:视图和部分基本表
模式:若干基本表
内模式:若干存储文件

数据定义与删除

create schema<模式名> authorization <用户名>

drop schema<模式名> <cascade|restrict>

基本表的定义

create table student
(sno char(9) priamry key
foreign key(Cpno) references Course(Cno)
)

关系的完整性

实体完整性
主码唯一且非空

参照完整性
外码要么为空,要么就要对应另一个表的主码

用户定义完整性
自己定义的完整性,比如年龄在18-60岁,身高多少之类的

实体完整性
参照完整性
用户定义完整性

第三章:SQL

数据定义与删除

create schema<模式名> authorization <用户名>

drop schema<模式名> <cascade|restrict>

基本表的定义

create table student
(sno char(9) priamry key
foreign key(Cpno) references Course(Cno)
)

SQL特点

SQL包括:数据查询、数据操作、数据定义、数据控制

非过程语言

SQL的特点
1、综合统一
把定义,修改,删除,连接,安全性,完整性,事务控制,动态SQL等统一起来

2、高度非过程化
层次模型和网络模型是过程化的,关系模型是非过程化的

3、面向集合的操作方式

4、以同一种语法结构提供多种使用方式
既可以独立,也可以嵌入到Java或者C++之中

5、语言简洁,易学易用

分支主题

SQL的基本概念

外模式:视图、部分基本表

模式:若干基本表

内模式:若干存储文件

一个关系对应一张基本表
一个或多个基本表对应一个存储文件

SQL的基本概念

SQL|SQL |SQL|SQL|所属模式

  • | - |- | -|-
    |SQL | | |
    |视图1|视图2||外模式
    基本表1|基本表2|基本表3|基本表4|模式
    |存储文件1||存储文件2|内模式

外模式:视图和部分基本表
模式:若干基本表
内模式:若干存储文件

SQL的基本语法

数据定义

数据定义包括、模式定义、表定义、视图和索引的定义

模式:create schema
表:create table
视图:create view
索引:create index

一个DBMS建立多个数据库、一个数据库建立多个模式、一个模式包含多个表、视图、索引

定义模式:create schema<模式名> authorization<用户名>

drop schema<模式名>

定义基本表:
`create table student
(Sno char(9) primary key

foreign key(cpno) references Course(Cno)
) 修改基本表 alter table<表名> add birth date添加列名 alter table<表名> add unique(CName)添加约束条件 删除基本表 drop table <表名>[RESTRICT|CASCADE]`

建立索引
create index<索引名> on <表名>(列名)
修改索引
alter index <旧索引名> rename to <新索引名>
删除索引
drop index<索引名>

数据字典:
一组系统表
数据库中所有的定义信息
包括:关系模式定义、视图定义、完整性约束、操作权限等

数据查询

数据查询
select

全体查询
包括 exists的查询

union intersect

数据更新

#####数据插入
insert into <表名> [] values()

insert into Student(....) values (....)

#####更新数据
update <表名> set <列名>=<表达式> [where ... ]

#####删除数据
delete from <表名> [where]

空置判断
IS NULL IS NOT NULL

视图

#####建立视图
create view <视图名> as <子查询>

with check option

行列子集视图

#删除视图
drop view<视图名> [CASCADE]

#视图的作用
1、视图能够简化用户操作
2、视图用多种角度看待同一数据
3、提供一定程度的数据独立性
4、提供安全保护
5、利用视图清晰地表达查询

第四章:数据库安全性

数据库安全性概述

不安全因素
1、非授权对数据库的恶意存取和破坏
2、数据库中重要的数据泄露
3、安全环境的脆弱性

自主存取控制方法
1、grant revoke
grant <权限> on table <表名> to <用户>

revoke <权限> on table <表名> from <用户>
用户、角色

创建用户
create user<username> with

数据库安全性控制

数据库安全性控制
1、用户身份鉴别

  • 静态口令鉴别
  • 动态口令鉴别
  • 生物特征鉴别
  • 智能卡鉴别
    2、存取控制

3、自主存取控制方法
4、授权:授予与收回

grant select on table Student
to U1
grant All privileges
on table Student,Course
To U2,U3
grant select on table sc
to public

5、数据库角色
角色指的是一类人,比如说教师,学生,家长。可以给一类人授权

6、强制存取控制方法

视图机制

为不同的用户定义不同的视图,把不需要的数据给隐藏起来,这样用户就不会进行误操作

create view CS_Student
as
  select *
  from student
  where sdept='IS'
  
grant select
on CS_Student
to 王平
grant all privileges
on CS_Student
to 王平

审计

审计

把对数据库的所有操作都记录到审计日志中,然后就可以通过日志审查这个里面是否有一些非法的行为

数据加密

通过一些加密算法,把明文变成密文,这样别人就无法查看

第五章:数据库完整性

正确性、相容性

正确性:符合现实世界语义
相容性:同一对象在不同表中的数据符合逻辑的

为维护完整性,需要实现如下功能
1、提供定义完整性约束条件的机制
2、提供完整性检查的方法
3、进行违约处理

三大完整性

实体完整性

主码唯一且非空

参照完整性

外码要么为空,要么对应另外一张表的主码

用户定义完整性

属性上约束条件的定义
1、非空 NOT NULL
2、列值唯一 UNIQUE
3、满足某一条件表达式 check

创建的时候用check进行约束

create table Student
(
	Sno char(9),
    Sname Char(8) NOT NULL,
    Ssex char(2),
    check(Ssex='女' Or Sname Not Like '张%' )
)

用constraint进行完整性约束

constraint C1 check(Sno between 9000 and 10000)

constraint c1 not null

constraint c1 primary key(Sno)

删除完整性
drop constraint C4

alter table student add constraint c3 check (sage<40)

断言

创建断言

create assertion <断言名><check 子句>

数据库中最多60名学生选修

create assertion 断言名
check(
	60 >= select count(*) from 。。。
)

只有符合check()里面的表示式才可以执行成功,否则就会执行失败

删除断言的语句格式

drop assertion <断言名>

触发器

触发器:用户定义在关系表上的一类由事件驱动的特殊过程

由某个触发事件引发的事务

建立触发器

create trigger<触发器名>
{BEFORE|AFTER} <触发事件> on<表名>
Referencing new|old row as <变量>
for each {row|statement}
[when <触发条件>] <触发动作体>

触发器不能定义在视图上

触发器类型:
1、行级触发器 for each row
2、语句触发器 for each statement
如果有一条语句涉及100行,则行级执行100次,语句执行1次

例子:

create trigger SC_T
 after update of Grade on SC
 referencing
 	OLDROW as OldTuple
    NEWROW as NewTuple
 FOR EACH ROW

WHEN(NewTuple.Grade>=1.1*OldTuple.Grade)
    insert into SC
    values(OldTuple.sno....)
删除触发器

`
drop trigger <触发器名> on <表名>

`

第六章:关系数据理论

存在的问题

####### 关系模式存在以下问题
1、数据冗余
比如姓名重复出现,浪费空间
2、更新异常
更新后造成数据不一致,比如班主任换名字,每个学生对应的每行都得换
3、插入异常
应该插入的无法被插入
比如系刚成立,无法插入数据
4、删除异常
不该删除的被删除
比如学生毕业,老师也没了

规范化-几个范式

####### 函数依赖
1、平凡函数依赖
2、非平凡函数依赖

完全函数依赖
部分函数依赖

####### 码
候选码
超码:超码是最小的候选码
从候选码中选一个为主码
主属性:包含在任意一个候选码中
全码:整个属性都是码

如果确定主属性?
如何选出候选码

####### 范式
1NF
表中无表
2NF
不包含非主属性对码的部分函数依赖
3NF
不包含非主属性对码的传递函数依赖
BCNF
不包含主属性对码的部分和传递函数依赖

数据依赖的公理系统

ArmStrong公理系统
1、自反律
大推出小
2、增广律
X-> Y 那么 XZ->YZ
3、传递律
X->Y Y->Z 那么X->Z

三条有用的推理规则
1、合并规则
X->Y Y->Z 那么X->YZ
2、伪传递规则
X->Y WY->Z 那么XW->Z
3、分解规则
X->Y Z∈Y 那么X->Z

Armstrong 是有效的、完备的

最小依赖集或者最小覆盖
P193有求解过程
最小依赖的求解的步骤
1、把右边写成单个字母
2、把重复的去掉
3、一个一个筛选,假如把当前依赖去掉,如果能推出,就可以去掉。否则就不能去掉
4、最后对左边再进行筛选

模式分解

######## 评价标准
1、无损连接
判断无损连接:chase过程

2、保持函数依赖
分解过后:连接的时候依赖没有丢失

分解保持函数依赖、总可以达到3NF、不一定达到BCNF
分解保持既可以保持函数依赖、又无损连接、可以达到3NF、不一定达到BCNF
具有无损连接、一定可以达到4NF

模式分解的算法P198

书中很晦涩难懂,建议百度

1、求出最小函数依赖集
2、把每一个依赖作为一个表
3、若都没有包含候选码,则再添加任意一个候选码
4、把没出现F中的属性也分到一个表中

第七章:数据库设计

数据库设计的基本步骤

####### 数据库设计的基本步骤
1、需求分析

2、概念结构设计
ER图、数据字典
3、逻辑结构设计
把ER图转换成逻辑模型
4、物理结构设计
逻辑模型转换为物理模型
5、数据库实施
写SQL代码
6、数据库运行和维护
性能检测、转储、恢复

数据字典包括
1、数据项
2、数据结构
3、数据流
4、数据存储
5、处理过程

需求分析

概念设计

ER图的画法

联系:1、一对一 一对多 多对多

矩形表示实体
椭圆表示属性
菱形表示联系

一对一转为主码
一对多转为外码
多对多转为一张表

ER图之间的冲突
1、属性冲突
2、命名冲突
3、结构冲突

逻辑结构设计

E-R图向关系模型转换
1:1 一个独立的关系模型
1:N 外码
M:N 一张表

物理结构设计

确定数据库的物理结构
对物理结构进行评价

设计关系模式的存取方法

数据库的实施和维护

第八章:数据库编程

嵌入式SQL

SQL语句,写到其他编程Java,C++

嵌入式SQL处理过程
1、预编译转化为函数调用
2、主语言再编译
3、变成主语言所编译的内容

嵌入式SQL与主语言之间的通信
1、SQL给主语言传递状态
2、主语言给SQL提供参数
3、SQL把查询结果交给主语言处理,通常用主变量和游标实现

主变量
SQL使用主语言的变量
主变量前面加冒号 比如 :name
游标
一个缓冲区,存放SQL的执行结果

select * from student where id =1

不使用游标的SQL语句
1、说明性语句、数据定义语句、数据控制语句、查询结果为单记录

EXEC SQL 
Select Sno,Sname into :Hsno,:HName From Student Where ...

使用游标的SQL
打开游标
EXEC SQL OPEN <游标名>
推进游标
EXEC SQL FETCH<游标名> INTO <主变量>
关闭游标
EXEC SQL CLOSE <游标名>

动态SQL
执行的时候才确定SQL子句,使用动态SQL

过程SQL

过程化SQL程序的基本结构是块

块的基本结构

定义部分:
	1、DECLARE 
    2、变量、常量、游标、异常
执行部分:
	1、BEGIN 	
    	SQL语句、过程化SQL的流程控制语句
    2、EXCEPTION
    	异常处理部分
    3、END

变量和常量的定义
1、变量定义
变量名 数据类型[[NOT NULL] 初值表达式]
2、常量的定义
常量名 数据类型 constant:=常量表达式
3、赋值语句
变量名:=表达式

控制流程
1、条件控制

IF condition THEN
	...
  END IF
IF condition THEN
	...
ELSE
	...
END IF

2、循环

LOOP 
	...
END LOOP
WHILE condition LOOP
	...
END LOOP
FOR count IN [REVERSE] boud... 
LOOP
	...
END LOOP

存储过程

创建存储过程

create or replace resource 过程名([参数1,参数2])
as <过程化SQL>
create or replace procedure 名字(a INT,b Int)
AS DECLARE
	c INT   /*定义参数*/
BEGIN
	/*执行过程SQL语句*/
	IF condition THEN
    END IF
END

执行SQL语句
CALL PROCEDURE 名字(...)
修改存储过程
alter procedure 过程名1 rename to 过程名2
删除存储过程
drop procedure 过程名()

函数

创建函数

create or replace function 函数名(参数...) return <类型>
AS <过程化SQL块>

执行函数

CALL\SELECT 函数(参数...)

修改函数

alter function 函数名1 rename to 函数名2

ODBC编程

第九章:关系查询和优化

查询处理

查询处理分为4个阶段:
1、查询分析
2、查询检查
3、查询优化
4、查询执行

查询优化包括代数优化和物理优化

代数优化就是本章讲的重点,优化树

代数优化

代数优化的规则
1、连接、笛卡尔积的交换律
2、连接、笛卡尔积的结合律
3、投影的串接定律
4、选择的串接定律
5、选择和投影操作的交换律
6、选择与笛卡尔积的交换律
7、选择与并的分配律
8、选择与差运算的分配律
9、选择对自然连接的分配律
10、投影和笛卡尔积的分配律
11、投影与并的分配律

查询树的算法P282
1、选择运算尽可能先做
2、投影运算和选择运算同时进行
3、把投影同其前或后的双目运算结合起来
4、

物理优化

第十章:数据库恢复技术

事务

事务的四大特性:
ACID
A:原子性 actom
要么全做,要么全不做
C:一致性 consistent
一致性与原子性密切相关,要么全做要么全不做,否则就会造成数据不一致。比如说:银行汇钱,两边都有操作才行

I:隔离性isolate
一个事务的执行不能被其他事务所干扰
D:持久性 duration
数据库的改变是永久的。比如要落入磁盘

事务的种类

故障的种类:
1、事物内部故障
采取REDO重做和UNDO撤销技术
2、系统故障 DBMS
系统突然停转,系统要重启
3、介质故障
硬件损坏
4、计算机病毒

恢复技术

数据转储
对失败的事务重新执行

日志文件
记录事务对数据的更新操作的文件

恢复策略

事务故障的恢复
事务异常终止,那么就撤销之前的所有操作

系统故障的恢复
还没执行完的事务UNDO、丢失的事务REDO。

介质故障的恢复
重装数据库,重做已经完成的事务

有检查点的恢复

第十一章:并发控制

并发带来的问题和解决

并发带来的问题
1、丢失修改
我修改的东西丢失了。比如说我把票价改成11元,结果还是原来的20元
2、读脏数据
我读的数据是已经撤回的无效数据。
比如我把想把车票改成2元,发现太便宜了,撤回。结果还没来得及撤回,就被其他人读取到了。

3、不可重复读
我在一个事务中,连续两次读到的数据不一样。
比如我刚开始读到车票为9元。结果另外一个人偷偷改成了99元,我第二次读就变成了99元。

解决方法

1、排它锁:写锁
X锁
2、共享锁:读锁
S锁

封锁协议

1、一级封锁协议
修改时,必须加X锁,直到结束
2、二级封锁协议
读的时候,加S锁,用完就放
3、三级封锁协议
读的时候,加S锁,直到结束

一级锁协议:解决丢失修改
二级锁协议:解决读脏数据
三级锁协议:解决不可重复度

分支主题

活锁和死锁

活锁:
该锁永远等待,得不到机会上锁

优先级的问题,你交钱了,你得到锁。穷人,没钱,

死锁:
多个锁互相等待,互相谦让,没人上锁

T1 :上锁 有A资源,等待B
T2: 上锁 有B这个资源 ,等待A

可串行性

1、可串行化调度
并发调度中的某一次结果与串行调度一致,称为可串行化

A  B C
A
B
C

可串行化是事务正确调度的准则

两段锁协议:

封锁的粒度

封锁粒度大,并发度小,开销小

有一个坏人,不知道这个人是谁,把整个班都给封了。

封锁粒度小,并发度大,开销大

02-17 11:40