数据库系统 知识点

参考教材:数据库系统概论 第五版(王珊 萨师煊 版本)

数据库系统概论 知识点集

一、绪论

数据库系统概述

数据:描述事物的符号记录。数据是数据库管理的基本对象,数据与其语义不可分。

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

数据库管理系统:(DateBase Management System,DBMS),是一个大型复杂的软件系统,是计算机中的基础软件。
  主要功能有一下几点:

  1. 数据定义功能

  2. 数据组织、存储和管理

  3. 数据操纵功能

  4. 数据库的事务管理和运行管理

  5. 数据库的建立和维护功能

  6. 其他功能

    数据库系统:由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。

数据管理

  1. 概念:对数据进行分类、组织、编码、存储、检索和维护
  2. 数据管理技术的发展过程: 人工管理阶段、文件系统阶段、数据库系统阶段

各阶段数据管理比较

特点人工管理阶段文件系统阶段数据库系统阶段
管理者程序员文件系统数据库管理系统
数据面向对象某一应用程序某一应用部门企业
数据的共享程度无共享,冗余度极大共享性差,冗余度答共享性高,冗余度低
数据独立性不独立独立性差具有高度的物理独立性和一定的逻辑独立性
数据结构化无结构记录内有结构、整体无结构整体结构化,用数据模型描述
数据控制能力应用程序自己控制应用程序自己控制DBMS提供数据安全性、完整性、并发控制和恢复能力

1.4. 数据库系统特点
数据结构化(与文件系统的本质区别)
共享性高,冗余度低且易扩展
数据独立性高(独立性指应用程序与逻辑结构、物理存储相互独立)
数据统一管理和控制

数据模型

数据模型是数据库用来对现实世界进行抽象的的工具,是数据库中用于提供信息表示和操作手段的形式框架。
分为两类:概念模型(实体-联系)、逻辑模型和物理模型
概念模型:实体、属性、码、实体型、实体集、联系
第二类中的逻辑模型:层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等
第二类中的物理模型:是对数据最底层的抽象。描述了数据在系统内部的表示方式和存取方法

数据库系统结构

数据库系统的三级模式结构

模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型(type)的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例。

  1. 模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
  2. 外模式:也称用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
  3. 内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

数据库系统的组成

数据库、数据库管理系统(及其开发工具)、应用程序、数据库管理员

二、 关系数据库

关系数据结构及形式化定义

关系

  1. 域(domain):是一组具有相同数据类型的值的集合。
  2. 笛卡尔积(cartesian product):给定一组域D1…Dn,允许其中某些域是相同的,笛卡尔积为

D1 x … x Dn = {(d1,d2, … ,dn) | di 属于Di, i = 1, 2, 3, … ,n}

其中每一个元素 (d1,d2, … ,dn) 为一个== n 元组 == ,或简称为元组(tuple)。
一个域允许的不同取值个数称为这个域的== 基数==。

若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为 候选码 (candidate key)。

属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同为了加以区分,必须对每列起一个名字,称为属性(attribute)。


关系模式:关系的描述。是静态的、稳定的。

关系:关系模式在某一时刻的状态或内容。是动态的、随时间不断变化的。
关系可以有三种基本类型: 基本关系 (通常又称为基本表或基表)、查询表和视图表。

关系数据库:有型和值之分。
关系数据库的型也称为关系数据库模式(对关系数据库的描述)包括若干域的定义,以及在这些域上定义的若干关系模式。
关系数据库的值也称关系数据库,是这些关系模式在某一时刻对应的关系的集合。

关系操作

操作的对象和结果都是 集合

关系的完整性

1.实体完整性
若属性(指一个或一组属性) A 是基本关系 R 的主属性,则 A 不能取空值(null value)。

2.参照完整性
外键不为空

3.用户定义完整性

关系代数

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。

在这里插入图片描述
1.传统的集合运算   包括并、差、交、笛卡尔积 4种运算。

2.专门的关系运算   包括选择、投影、连接、除运算。

关系代数中,这些运算经过有限次复合后形成的表达式称为关系代数表达式

外连接:
①左外连接:把连接运算符左边的所有元组都保留下来,不匹配的元组在右边补
空值
②右外连接:把连接运算符右边的所有元组都保留下来,不匹配的元组在右边补
空值
③外连接:把所有元组都保留下来

三、 关系数据库标准语言SQL

SQL概述

  1. 标准语言SQL
    3.1. SQL的数据定义功能
    模式定义
    表定义
    视图和索引的定义
    3.2. SQL特点
    综合统一(集数据定义语言、数据操作语言、数据控制语言于一体)
    高度非过程化
    面向集合的操作方式
    以同一种语法结构提供多种使用方式
    语言简洁,易学易用

数据定义

一个关系数据库管理系统的实例(instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包含多个表、视图和索引等数据库对象。

数据查询

6.嵌套查询
(1)分类:
①不相关子查询:子查询的查询条件不依赖于父查询

②相关子查询:子查询的查询条件依赖于父查询
(2)in
(3)比较运算符

(3)any.all
(5)exists (存在), not exists(不存在)

7集合查询
(1)intersect(交)
(2)union(并)
(3)except(差)
8派生表
9插入数据
(1)插入元组:
insert
into 表名 (属性1,属性2,…)
values (值1,值2,…)
(2)插入子查询结果:
(3)insert
into 表名(属性1,属性2,…)
子查询

数据更新

10.修改数据
update 表名
set 属性=修改的值
where 条件
子查询修改:(集合)

11.删除数据
delete from 表名 (修改和删除的条件可以是子查洵) where 条件 子查询删除(集合)

空值处理

视图

视图的作用
视图能够简化用户的操作(简化操作)
视图使用户能以多种角度看待同一数据(多角度)
视图对重构数据库提供了一定程度的逻辑独立性(逻辑独立性)
视图能对机密数据提供安全保护(安全保护)
适当利用视图可以更清晰地表达查询(清晰表达)

视图
(1)创建视图
create view 视图名(属性1,属性2,…) //属性可省
as 查询语句
[with check option] //可省,加上表示对视图进行更新,插入,删除操作
时要保证更新,插入或删除的行满足子查询中的条件表达式

(2)删除视图
drop view 视图名 [cascade] //cascade可省,表示级联删除该视图和它导出的所有视图
(3)查询视图,更新视图和基本表类似

范式
1.1NF:关系中的每个属性都是原子的,不可再分的,每个关系都要满足1NF

2.2NF:满足1NF且这张表中不存在属性对主键的部分函数依赖(部分函数依赖指的是依赖于主键的一部分)
如: S(sno,sname,age,cno,grade) 主键(sno,cno) 成绩由sno,cno共同决定,但sname,age仅由sno就可以决定,即sname,age只依赖于主键的一部分,所以不满足2NF
解决方法:一张表只管一件事.
把学生表分成学生基本信息表和选课表
S(sno,sname,age) SC(sno,cno,grade)
3.3NF:满足2NF且不存在属性对主键的传递依赖

如Teacher(T#,sal_level,salary)
T#(决定)→sal-level sal_level→salary
如将2级公资水评的工资为2000改为2级工资水平工资为3000。虽然学号没变,但工资额己经分为 Teacher(T#,sal_level) level(sal_level,salary)
解决方案:一张表管一件事
4.BCNF:不存在以下关系
R(C ,S , P)

SQL查询:
基本查询
1.格式
select distinct 所查内容
from 所查询的表(可多个)
where 条件
2.常用条件
(1)between…and…,not between…and…,在…之间或不在…之
(2)in ,not 确定集合
(3)like 模糊查询
①%表示任意长度 ②_表示任意单个字符
③若你想查的字符为_,则在_前加
(4)and 查询结果满足and两边条件
or 查询结果满足两边一个条件就行
not 否定
(5)is null, is not null
聚集函数
(1)count(*):统计在一个关系中有多少元组
(2)count([distinct]A):计算属性A有多少个值(加distinct表示有多少不同的值)
(3)sum([distinct]A):A的属性上所有元组加一起求和
(4)avg([distinct]A):对A的属性上所有元组求平均值
(5)max([distinct]A):求属性A的最大值
(6)max([distinct]A):求属性A的最小值
4.查询完整格式
select [distinct] 所查内容 (注:having可以和聚集函数
from 所查询的表(可多个) 一起使用,where不可以)
where 条件或连接或嵌套
group by 属性 对属性相同的值进行分组
having 条件 对group by得到的组进行筛选
order by____(desc) 对查询结果的一个或多个属性升序或降序(desc)

5.连接查询
(1)用法:所查信息不能在一个表中查出来
(2)自然连接:在等值连接的基础上把重复属性列去掉
(3)自身连接:自己与自己做笛卡尔积,再连接条件做选择操作
(4)外连接

(5)多表连接
在这里插入图片描述

四、 数据库安全性

概念:保护数据库以防止不合法使用所造成的的数据泄露、更改或破坏

数据库不安全的因素
非授权用户对数据库的恶意存取和破坏
数据库中重要或敏感的数据被泄露
安全环境的脆弱性

数据库安全性控制

紫皮书TCSEC/TDI将系统划分为4组(division)7个等级:

   C2级的数据库管理系统支持自主存取控制方法DAC:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。 

   B1级的数据库管理系统支持强制存取控制方法MAC:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

数据库的安全性:指保护数据库以防止不合法使用所造成的数据泄露、更改或破环。

①用户身份鉴别

②多层存取控制:系统提供用户权限定义和合法权限检查功能,用户只有获得某种权限才能访问数据库中的某些数据。

视图机制

③视图机制:为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。

主体与客体:

  1. 主体:是系统中的活动实体,既包括数据库管理系统DBMS所管理的实际用户,也包括代表用户的各进程。

  2. 客体:是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。

DBMS的完整性控制机制应具有哪些功能?

   应具有三个方面的功能:①定义功能,即提供定义完整性约束条件的机制;②检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;③违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保护数据的完整性。

审计

概念:将用户对数据库的所有操作自动记录下来放入审计日志中。

		审计员利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间,和内容等。

数据加密

概念:根据一定的算法将原始数据——明文(plain text)变换为不可直接识别的格式——密文(cipher text)
数据加密主要包括存储加密与传输加密。

五、 数据库完整性

概念:数据库数据中的正确和相容性

实体完整性

参照完整性

用户定义完整性

完整性约束命名子句

完整性与安全性
1.三大完整性约束
基本概念:(1)候选码:一个或一组属性能唯一地标识一个元组,而其子集不能
(2)主码:若有多个候选码.则选其中一个为主码
(3)外键(外码):一个表中一个(多个)属性,不是自身的主码,且这个属性和另一个表中的主码属性是同一个属性,则这个(组)属性称为外码
(1)实体完整性:主码不能重复,主码不能为空

(2)参照完整性:外键不能为空(或者均为空值)外键等于被参照表的主码值
(3)用户定义完整性:用户自定义的完整性约束条件
2.可能大题:创建一个表,给出属性以及属性的条件,定义主建和外键,而且当你更新或删除与外键有关的另一个表时,这个表是否要级联,拒绝更新,删除
(1)基本概念:①数据类型:a.char(n):长度为n的定长字符串b.varchar(n):最大长度为n的变长字符串c.int:长整数(4字节) d.smallint:短整数(2字节)
②定义主建,外键
a.主键: primary key (属性1,属性2,) 相同
b.外键: foreign key 外键 reference 被参照表(主键)
③级联更新/删除:on delete/update cascade
④拒绝更新/删除:on delete/update no action
一般③④跟在外键后
(2)结构
create table 表名
(属性 数据类型 定义的约束条件 (包括①非空:not null②唯一 日唯unique③check:自定义的约束条件④定义为主码)
属性 数据类型 定义的约束条件

primary key (属性1,属性2)//定义主键
foreign key (属性)外键 references 被参照表(属性)主键 on delete/update cascade/no action
画√的地为可以加constraint 完整性约束条牛名
(4)授权
grant 权限(如delete)
on 对象类型(如table,view) 对象名
to 用户
[with grant option]//可省,加上表示可以将权限授予其他用户
(5)对权限收回
revoke 权限(如select)
on 对象类型(如table,view)
from 用户

断言

触发器

数据库完整性概念与数据库安全性
前者是为了防止存在不符合语义的数据,对错误输入输出进行约束。后者是为了防止恶意的破坏和非法的存取。一个是防止非法用户和非法操作,一个是防止不符合语义的数据。

概念模型
概念模型是现实世界到机器世界的一个中间层次。它用于信息世界的建模,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。

数据模型

  数据模型:是数据库中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式架构。
  
  作用:精准地描述了系统的静态特性、动态特性和完整性约束条件。
  
  三要素:数据结构、数据操作、数据的完整性约束条件。
  1. 试述关系模型的概念,定义并解释以下术语:关系、属性、域、元组、码、分量、关系模式。

    关系:一个关系对应一张表。

    属性:表中的一列。

    域:属性的取值范围。

    元组:表中的一行。

    码:唯一标识实体的属性集称为码。

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

    关系模式:对关系的描述,一般表示为“关系名(属性1,属性2,……,属性n)”。

    注:形式化地表示为:R关系名(U组成该关系地属性名集合,D属性所来自的域,DOM属性向域的映像集合,F属性间数据的依赖关系集合)

  2. 三级模式结构
    优点:三级模式是数据的三个抽象级别,它把数据的具体组织留给数据库管理系统管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中具体表示方式和存储方式。

    DBMS在三级模式间提供的二级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

  3. 数据与程序的物理独立性与逻辑独立性

    **数据与程序的物理独立性**:当数据库的存储结构改变时,由数据管理员对模式/内模式映像作相应改变,可以使模式保持不变、从而应用程序也不必改变。
    
    **数据与程序的逻辑独立性**:当数据的逻辑结构(即模式)改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变,从而应用程序不必修改。
    
    DBMS在三级模式之间提供的两级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
    

    对于违反实体完整性和用户定义完整性的操作,一般采用拒绝执行的方式进行处理;对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。

例:
设宾馆酒店业数据库有四张表:

Hotel(hotelNo, hotelName, city)
Room(roomNo, hotelNo, type(房间类型), price)
Booking(roomNo, guestNo, dateFrom(起始日期), dateTo(终止日期))
Guest(guestNo, guestName, guestAddress)

备注:price为int类型,其余字段均为字符串类型(VARCHAR(n)),下划线标识的字段为主码。

(1)试用关系代数完成如下查询:

①列出“长春”的所有宾馆的宾馆号和宾馆名称;

ΠhotelNo,hotelName(σcity=‘长春’(Hotel))

②列出“长春宾馆”的所有房间类型和价格;

Πtype,price(σhotelName=‘长春宾馆’(Hotel⋈Room))

③检索2017年12月2号(’20171202’)入住“长春宾馆”的客人号码和客人姓名。

ΠguestNo,guestName(Guest)⋈ ΠguestNo(ΠroomNo,guestNo(σdataFrom=20171202(Booking))⋈ ΠroomNo(ΠhotelNo(σhotelName=‘长春宾馆’(Hotel))⋈ Room)

(2)写出SQL语句:

①定义关系模式Hotel和Room,要求在模式中完成以下完整性约束条件的定义:
定义模式的主码;定义参照完整性;房间价格不能低于100元;定义type、price和hotelName不能为空。

create table Hotel
(hotelNo char(10) primary key,
hotelName char(10) not null,
city char(10))create table Room
(roomNo char(10) primary key,
hotelNo char(10),
type char(10) not null,
price char(10) not null check(price>=100),
foreign key(hotelNo) references Hotel(hotelNo));

②统计各个宾馆的房间数。

select count(roomNo) from Room group by Hotel.hotelNo;

③删除2017年12月2号(’20171202’)退房的订房信息。

delete from Booking where dateTo=20171202);

④增加一条宾馆信息(hotelNo:H1035, hotelName:前进宾馆, city:长春)。

insert into Hotel values(‘H1035’,‘前进宾馆’,‘长春’);

⑤将“长春宾馆”(宾馆名)的‘369’(房间号)房间的房间类型修改为“单人间”。

update Room set type = ‘单人间’
where roomNo =369and hotelNo in
(select hotelNo from Hotel where hotelName = ‘长春宾馆’)

⑥创建一个断言,限制每个宾馆单人间的房间数不能多于8个。

create assertion roomnum check(8>=all(select count(*) from Room where
type=‘单人间’ group by hotelNo))

⑦创建一个视图,包含宾馆号、宾馆名称、所在城市、房间号、房间类型和房间价格,并将该视图的查看权限授予用户U1。

create view h (hotelNo,hotelName,city,roomNo,type,price)
as
(select Hotel.hotelNo,hotelName,city,roomNo,type,price from Hotel,Room
where Hotel.hotelNo = Room.hotelNo);

grant select on h to U1;

⑧建立触发器,当对表Room的price属性进行修改时,若价格增加了10%,则将此次操作记录到另一个表Room_U (roomNo, hotelNo, type(房间类型), Oldprice, Newprice)中,其中Oldprice是修改前的价格,Newprice是修改后的价格。

create trigger Room_T
after update of price on Room
referencing
old row as oldTuple,
new row as newTuple
for each row
when(newTuple.price>=1.1*oldTuple.price)
insert into Room_U (roomNo, hotelNo, type, oldTuple.price, newTuple.price)

例: 把图1中的E-R图转换为关系模型。
教务系统E-R图(部分)

教材(教材号,教材名,出版社,价格,课程号)
学生(学号)
课程(课程号)
教师(职工号)
选课(学号,课程号)
授课(课程号,职工号)注意“下划线”为主码

3.设有表SC(sno, cno, grade),编写存储过程将学生选课成绩grade从百分制改为等级制(即A、B、C、D、E)。(8分)

create or replace procedure change_c()
as declare
	chgrade char(1);
	currecord record;
BEGIN
	alter table SC add column(newgrade char(1));
	for currecord in select*from SC
	loop
		if currecord.grade<60 then chgrade=‘E’;
		else if currecord.grade<70 then chgrade=‘D’;
		else if currecord.grade<80 then chgrade=‘C’;
		else if currecord.grade<90 then chgrade=‘B’;
		else chgrade=‘A’;
		end if;
		update SC set newgrade=chgrade
			where sno=currecord.sno and cno=currecord.cno;
	end loop;
	alter table SC drop column grade;
	alter table SC rename newgrade to grade;
end

六、 关系数据理论

规范化

关系模式与关系的区别
关系的描述称为关系模式 ,可形式化的表示为R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。
关系模式是型;关系是值,是关系模式的实例。

1.函数依赖   是一个关系内部属性与属性之间的一种约束关系,这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。

设R(U)是一组关系模式,X,Y是U上的子集。对于R(U)中的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同
X函数确定Y或Y函数依赖X,记做 X − > Y X->Y X>Y ; F ( X ) = Y F(X)=Y F(X)=Y


设K是关系R(U,F)中的一组属性,如果U完全依赖于K,那么K是R的候选码。

2.范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
个低一级的范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫做规范化。

2.1 2NF
R 属 于 1 N F R 属于 1NF R1NF ,且每一个非主属性完全函数依赖于任何一个候选码,则 R 属于 2NF。

若一个关系模式 R 不属于2NF会产生以下几个问题:
插入异常
删除异常
修改复杂

6.5. 2NF
码X,非主属性Z,不存在X->Y(X不函数依赖于Y),Y->Z(Z不属于Y)

6.6. BCNF
如果X->Y,Y不属于X,且X必包含码

补充理解:重点掌握前4个范式 :1NF、2NF、3NF、BCNF

关系数据库中的关系需满足一定要求,满足不同程度要求的为不同的范式。

满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式

简称2NF,其余范式以此类推。对于各种范式之间有如下关系:

1NFの定义: 属于第一范式关系的所有属性都不可再分,即数据项不可分。(数据表具有原子性。)

2NFの定义: 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。

候选码: 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为candidate key。

主码:若一个关系中有多个候选码,则选定其中一个为 primary key。

外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码foreign key。

主属性: 所有候选码的属性称为prime attribute。

非主属性/非码属性:不包含在任何候选码中的属性称为non-prime attribute或non-key attribute。

全码:在最简单的情况下,只有一个属性是候选码。在最极端的情况下,关系模式的所有属性都是候选码,称all-key。

函数依赖:设R(U)是属性集U上的关系模式,X,Y是U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或Y函数依赖于X,记作X→Y。X称这个函数依赖的决定属性组/决定因素determinant。

A→B,如果通过A属性(或属性组)的值,可以确定唯一的B属性的值,则称B函数依赖于A

例如:学号→姓名;(学号、课程名称)→ 分数

平凡函数依赖:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。

非平凡函数依赖:当关系中属性集合Y不是属性集合X的子集时(Y⊈X),存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。

完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。记作

A→B,如果A是一个属性组,B属性值的确定需要依赖A属性组的中所有的属性值,则称B完全函数依赖于A

例如:(学号、课程名称)→ 分数

部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。记作

A→B,如果A是一个属性组,B属性值的确定只需依赖A属性组的中某一些的属性值(第二范式就是消除这个),则称B部分函数依赖于A

例如:(学号 、课程名称)→ 姓名

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y( Y⊈X 且Y !→X ),Y→Z,则称Z传递函数依赖于X。记作

A→B , B→C 如果通过A属性(或属性组)的值,可以确定唯一的B属性的值,再通过B属性(属性组)的值,可以唯一确定C属性的值,那么称C传递依赖于A

例如: 学号→系名 ,系名→系主任

直接函数依赖:若X→Y,Y→X,记作X←→Y,又Y→Z,则Z直接函数依赖于X。

3NFの定义: 非主属性既不传递依赖于码,也不部分依赖于码。

BCNFの定义: 关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCFN。

4NFの定义: 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

5NF:必须满足第四范式;表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

数据依赖的公理系统

七、 数据库设计

设计概述

需求分析

概念结构设计

逻辑结构设计

物理结构设计

数据库的实施与维护

E-R图
1.基本概念
3.转换为关系模型
(1)E-R图的实体转换为关系(表名)
(2)E-R图的属性转换为关系的属性
(3)联系转换
①联系种类:1:1,1:n(n:1),n:m
②联系转换方法:
a.1:1两种方法
第一种将联系转换成一个关系(表),这个关系的属性是两个关系的主码加联系的属性.
第二种是将一个关系的主码加联系的属性写到另一个关条中
b.1:n转换两种方法
第一种
第二种此时是将联条的1:n中1端关系的主码写到n端上

7.1. 数据库设计概述
数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

7.2. 数据库设计的基本步骤
需求分析(建立数据字典)
概念结构设计(E-R图建立,应用需求抽象为信息世界的结构)
逻辑结构设计(E-R图转成相应的数据模型,在基本表基础上构建外模式)
物理结构设计(选择物理存储安排,建立索引,构建内模式)
数据库实施
数据库运行和维护
需求分析和概念设计独立于任何数据库管理系统
逻辑设计和物理设计与选用的数据库管理系统密切相关
7.3. 数据字典
它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。
通常包括:数据项、数据结构、数据流、数据存储和处理。

八、 数据库编程

嵌入式 SQL

过程化 SQL

存储过程和函数

8.1. 标准SQL缺点和SQL编程技术优点
标准SQL是非过程化的查询语言,缺少流程控制能力,难以实现应用业务的逻辑控制
SQL编程技术可以有效克服SQL语言实现复杂应用方面的不足,提高应用系统和数据库管理系统间的互操作性。

8.2. 存储过程
存储过程是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中

优点:

运行效率高,因为是被编译后保存在数据库中的
降低了客户机和服务器的通信量
方便实施企业规则
8.3. ODBC编程
是为解决异构数据库间的数据共享而产生的,它建立了一组规范,并提供了一组访问数据库的应用程序编程接口(API)。
ODBC具有两重约束力:一方面规范应用开发,另一方面规范关系数据库管理系统应用接口
组成:
用户应用程序
ODBC驱动程序管理器
数据库驱动程序
数据源

九、 关系查询处理和查询优化

查询处理

分为4个阶段:查询分析、查询检查、查询优化和查询执行

查询分析:对SQL语句进行语法分析和词法分析
查询检查:对合法的查询语句进行语义检查
查询优化:选择一个高效执行的查询处理策略;按照优化的层次一般可分为代数优化和物理优化
查询执行:依据优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码。然后执行并回送查询结果
9.2. 查询优化在数据库系统中的重要性和可能性
9.2.1. 重要性
减轻了用户选择存取路径的负担,用户只要提出“干什么”,而不需“怎么干”
查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序做的更好
9.2.2. 可能性
优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息
如果数据库的物理统计信息变了,系统可以自动对查询进行重新优化而不必重写程序
优化器可以考虑数百种不同的执行方案,而程序员一般只能考虑有限的几种
优化器中实现包含了很多复杂的优化技术,这些技术的实现降低了编写人员的门槛
9.3. 查询优化的一般准则
选择运算应尽可能先做
把投影运算和选择运算同时进行
把投影同其前或后的双目运算结合起来
把某些选择同它前面要执行的笛卡尔积结合起来成为一个连接运算
找出公共子表达式
选取合适的连接算法

查询优化

9.4. 查询优化的一般步骤
将查询转为内部形式,语法树
代数优化,利用优化算法,将语法树转为更优化的形式
物理优化,选择存取路径
生成优化查询计划
9.5. 物理优化

代数优化

物理优化

物理优化的目的是为了选择高效合理的操作算法或存取路径,方法有:
基于规则的启发式优化
基于代价估算的优化
二者结合的优化方法

十、 数据库恢复技术

事务的概念

数据库恢复概述

故障的种类

恢复的实现技术

恢复策略

具有检查点的恢复技术

数据库镜像

数据恢复
提升数据库利用率。例如被加了排他锁,可以在镜像数据库上读。
10.11. 为什么UNDO是反向扫描日志,REDO是正向扫描日志
UNDO是恢复到第一个失败的事务就OK了,正向做不到。REDO是恢复到最后一个成功的事务之后。

10.12. 恢复系统是否可以保证事务的原子性和持续性
UNDO保证原子性,REDO保证持续性

10.1. 事务的概念及事务的4个特性及恢复技术能保证事务的哪些特性
ACID

原子性,事务是数据库中的逻辑工作单元,里面的操作要么全做,要么不做
一致性,事务执行结果必须是一个事务从一个一致性状态转到另一个一致性状态
隔离性,一个事务的执行不能受其他事务的影响
持久性,一旦一个事务完成提交了,那么对数据库的改变是永久的,
保证了事务的原子性和隔离性

10.2. 故障种类
事务内部的故障
系统故障
介质故障
计算机病毒
10.3. 恢复技术
恢复机制两个关键问题:如何建立冗余数据,以及如何利用这些冗余数据实施数据库恢复。建立数据库冗余数据最常用的技术是数据转储和登记日志文件

10.4. 为什么事务的非正常结束会影响数据库数据的正确性?请举例说明
如果数据库运行过程中出现故障导致事务非正常结束,有些事务尚未完成就被中断,那么就破坏了事务的原子性,这些事务的一部分操作已经写入了数据库,这时数据库处于不一致的状态

例如银行转账

10.5. 登记日志文件时为什么必须先写日志文件,后写数据库?
因为这是两个不同的操作,如果中间发送故障,两个只能完成一个。如果先写了数据库操作,而在日志中没有这个记录,那么就无法恢复这个修改了。如果先写了日志,但没有写入数据库。那么恢复时只要多执行一次UNDO操作,并不会影响数据库操作。

10.6. 针对不同的故障,给出恢复的策略和方法
10.6.1. 事务内部故障
反向扫描文件日志,查找到该事务的更新操作
对该事务的更新操作执行逆操作,直到读到改事务的开始标记
10.6.2. 系统故障
正向扫描日志文件,找出在故障前已经提交的事务队列和未完成队列
对未完成队列执行中各个事务执行UNDO操作
对已经提交的各个事务执行REDO操作
10.6.3. 介质故障
装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态
装入转储结束时刻的日志文件副本
启动系统恢复命令,由DBMS完成恢复功能
10.7. 什么是检查点记录,包括什么内容
检查点记录是一类新的日志记录。它的内容包括:

建立检查点时刻所有正在执行的事务清单
这些事务的最近一个日志记录的地址
10.8. 具有检查点恢复技术有什么优点?
节约时间,利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量时间
需要REDO的操作实际上已经将它们的更新操作结果写到数据库了,恢复子系统又重新执行了这些操作,浪费了大量时间
10.9. 使用检查点方法进行恢复的步骤
找到最后一个检查点记录在日志文件的地址,由该地址在日志文件中找到最后一个检查点记录
由该检查点记录得到检查点建立时刻所有正在执行的事务清单,建立两个事务队列UNDO和REDO
从检查点开始正向扫描日志文件,根据提交与否选择重做还是撤销
对队列执行事务操作
10.10. 什么是数据库镜像?它有什么用途
自动将整个数据库或者关键数据复制到另一个磁盘上。每当主数据库更新时,把更新后的数据复制过去,即自动保证镜像数据和主数据的一致性。
用途

十一、 并发控制

概述

封锁

封锁就是事务T对某一数据进行操作前,先向系统发送请求,对其加锁,加锁以后事务就对这个数据有了一定的控制前,在事务T释放锁之前,其他事务不能对该数据进行更新或者读取
封锁类型有:排它锁、共享锁

封锁协议

三级协议
加X锁,直到事务结束再释放。解决了丢失修改问题。
在1基础上加S锁,读完后可以释放,解决了读取脏数据的问题。
在1基础上加S锁,直到事务结束再释放,解决了不可重复读问题

活锁和死锁

11.5. 什么是活锁,产生原因和解决办法
当一系列封锁操作无法按照其正确顺序执行时,就可能导致事务无限等待某个封锁。
避免活锁的方法就是使用FCFS

死锁
举例说明什么是死锁。
防止死锁的方法有两种:预防死锁、死锁诊断与解除
预防死锁有两种办法:一次封锁法、顺序封锁法
死锁诊断与解决:超时法、事务等待图法
解除法:选择处理死锁代价最小的事务,将其解除

11.7. 什么样的并发调度是正确的调度
可串行化的并发调度是正确的调度。可串行化调度定义:多个事务并发执行是正确的,当且仅当其结果与按某一次序执行的串行执行的结果相同。

11.8. 如何保证并发调度的正确性
冲突可串行化,使用两段锁协议

封锁协议
对事务T要修改的数据加X锁,直到事务结束(包括正常结束和非正常结束)时才释放。
• 一级封锁协议可以防止丢失修改,并保证事务T是可恢复的
• 但不能保证可重复读和不读“ 脏” 数据。
封锁协议总结:

死锁:两个事务相互等待对方先释放资源,则会造成死锁。
解决:①一次封锁②顺序封锁
数据库故障
• 非预期的故障:事不能由应用程序发现的(称为非预期的故障),如: • 运算溢出 • 并发事务发生死锁而被选中撤销该事务 • 违反了某些完整性限制等务内部的故障
• 系统故障:是指造成系统停止运转、要重启的故障。 • 例如,硬件错误(CPU故障)、操作系统故障、突然停电等都是系统故障。 • 这样的故障会影响正在运行的所有事务,但不破坏数据库。
• 其他故障:介质故障:指外存故障,如磁盘损坏等。 • 这类故障会对数据库造成破坏,并影响正在操作的数据库的所有事务。 • 发生的可能性很小,但破坏性很大。
• 计算机病毒:的破坏性很大,而且极易传播,它也可能对数据库造成毁灭性的破坏。
总结两种: • 一是数据库本身被破坏。 • 二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。

并发调度的可串行性

  1. 并发控制
    11.1. 数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?
    数据库时共享资源,通常有多个事务同时执行。当多个事务同时并发地存取时就会产生同时读/写同一个数据。若对并发操作不加以控制就可能导致存取不正确的数据,破坏事务的一致性。
    并发控制保证了事务的一致性和隔离性

11.2. 并发操作会产生哪几类数据的不一致?用什么方法可以避免
丢失修改,两个事务对同一个数据同时进行修改,那么就会有一个事务的操作被另一个事务的修改覆盖掉。
不可重复读,一个事务读了某一数据以后,另一个事务对其进行了更新操作,那么再次读的时候就会得到与上次不一样的数据。
读取脏数据,一个事务修改了某一数据并把其写回磁盘,另一个事务读取了这个数据以后,之前那个事务因为某种原因撤销了。
避免不一致性的方法就是并发控制,常用的并发控制有封锁法、时间戳法、乐观控制法、多版本并发控制法等

两段锁协议

封锁的粒度

十二、数据库管理系统

数据库管理系统的基本功能

数据库管理系统主要是实现对共享数据有效的组织、存储、管理和存取。
围绕数据,数据库管理系统应具有如下功能

  1. 数据库定义和创建

  2. 数据组织、存储和管理

  3. 数据存取

  4. 数据库事务管理和运行管理

  5. 数据库的建立和维护

  6. 其他功能

数据库管理系统的系统结构

关系数据库管理系统的层次结构
1. 最上层是应用层,位于关系数据库系统的核心之处。
2. 第二层是语言处理层,该层处理的对象时数据库语言,如SQL。
3. 第三层是数据存取层,该层处理的对象是单个元组,把上层的集合操作转换为单记录操作。
4. 第四层是数据存储层,该层处理的对象是数据页和系统缓冲区。

关系数据库管理系统层次结构划分的思想具有普遍性。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZC~Reunion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值