下文不是本人写的,是yhw同学的笔记,本人代发。
不过可以浅谈个人对于数据库的理解:
数据库课程短,但是难度不小,知识点很杂,很多。如果平时不学习,仅考前背诵还是很吃力的!如果想考高分,不仅知识点要背熟,那几个模式分解(1NF....),B+树,SQL语句,事务管理等等都要熟练掌握。
我个人也看看了yhw同学的笔记,特点如下:
1、基本概念较全
2、理论推理过程较少
3、有例题,但少
个人建议:
考前冲刺可以看看,或者过完一遍后再看巩固。
不太建议初学,老师的PPT适合初学。
或者来不及复习了,可以直接背概念....
绪论
DB、DBMS和DBS的定义p4
Data:描述事物的符号记录称为数据,是对客观事物的逻辑归纳
数据的含义或解释称为数据的语义
DB:DataBase 数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
具有永久储存、有组织和可共享三个基本特点
DBMS:DataBase Management System数据库管理系统是位于用户应用和操作系统之间的一层数据管理软件,充当数据库与其用户或程序之间的接口,允许用户检索、更新和管理信息的组织和优化方式。目的是为用户提供一种可以方便、高效地存取数据库信息的途径。
DBS:DataBase System数据库系统是指在计算机系统中引入数据库后的系统。一个完整的数 据库系统一般由数据库、数据库管理系统、应用开发工具、应用系统、数据库管理员 和用户组成(的存储、管理、处理和维护数据的系统)。
数据管理技术的发展阶段p6
- 人工管理阶段:数据不保存、数据不共享冗余度极大、数据不独立完全依赖于程序、应用程序管理数据(应用程序)
- 文件系统阶段:(特点)数据可以长期保存、由文件系统管理数据、(缺点)数据共享性差冗余度大、数据独立性差数据的逻辑结构改变必须修改应用程序。(文件系统)
- 数据库系统阶段:面向全组织、面向现实世界、独立性较强、数据由DBMS统一存取和维护、数据结构化、数据的共享性高、冗余度低且易扩充(数据库管理系统)
数据模型(是数据库系统的核心和基础)p14
数据模型是对现实世界数据特征的抽象和模拟,是用来描述数据的语法、语义和操作的一组概念的集合。
第一类是概念模型(也称信息模型),它是按用户的观点来对数据和信息建模,主要用于数据库设计。
第二类是逻辑模型和物理模型
逻辑模型(狭义的数据模型)是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。主要包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型。
物理模型(也称存储模型),它是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法。
数据模型的三要素:p18
- 数据结构,即描述数据库的组成对象以及对象之间的联系(对系统静态特性的描述)
- 数据操作,是指对数据库中各种对象(型)的实例(值)允许执行的操作【包括查询和更新】的集合以及有关的操作规则【操作的确切含义、操作符号、操作规则优先级、实现操作的语言】(对系统动态特性的描述)
- 完整性约束条件,一组完整性规则,给定的数据模型中数据及其联系所具有的制约和储存规则。正确有效相容
(实体)客观存在并可相互区别的事物p16
(实体型)具有相同属性的实体集合的抽象,eg:学生(学号,姓名,性别,...)
(实体集)同一类型或具有共同属性的所有实体的集合,eg:全体学生
(实体实例)实体集中的单个实体
外延法E={e1,...,en} 内涵法E=(A1,...,An)
(属性)实体所具有的某一特性
(码/键/关键字)可唯一标识实体实例的属性或属性集,eg:学号是学生实体的码
(联系)实体(型)内部的联系和实体(型)之间的联系,有1:1、1:n、n:m
各种联系
一对一联系:实体集A中的每一个实体,实体集B中至多有一个与之有联系,相反实体集B中的每一个实体也至多与实体集A中的一个联系。
eg:一个班级只有一个班长 一个班长只在一个班中任职
一对多联系:实体集A中的每一个实体,实体集B中有n个实体与之有联系,相反实体集B中的每一个实体至多与实体集A中的一个联系。
eg:一个班级有若干名学生 每个学生只属于一个班级
多对多联系:实体集A中的每一个实体,实体集B中有n个实体与之有联系,相反实体集B中的每一个实体也与实体集A中的m个实体联系。
eg:一门课程同时有若干个学生选修 一个学生也可以同时选修多门课程
E-R图:菱形框写联系名 矩形框写实体名 椭圆框写属性名 且在无向边旁标注1:1、1:n、n:m
层次模型和网状模型统称为格式化模型(包括双亲结点和子女结点)
层次模型:只有一个根节点,且除根结点以外其余结点只有一个双亲结点(树)
网状模型:允许一个以上的结点无双亲,且一个节点可以有多个双亲结点(图)
关系模型:数据结构是一张规范化的二维表,关系必须是规范化的,关系的分量必须是一个不可分的数据项
DBS体系结构p27
型是指对某一数据的结构和属性的说明,值是型的一个具体赋值
型:(学号,姓名,性别,系别,年龄,籍贯)
值:(123456,张三,男,软件,19,广东深圳)
模式是数据库中全体数据逻辑结构和特征的描述,仅仅涉及型的描述不涉及具体值(一个实例)
三级模式两级映像以及两级数据独立性p29
- 模式(也称逻辑模式)是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
- 外模式(也称子模式或用户模式)是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。是模式的子集
- 内模式(也称存储模式)一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
①外模式/模式映像
定义了该外模式和模式之间的对应关系。当模式改变时,由数据库管理员对外模式/模式映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
②模式/内模式映像
是唯一的。定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,由数据库管理员对模式/内模式映像作相应改变,可以是模式保持不变,从而应用程序不用改变。保证了数据与程序的物理独立性。简称数据的物理独立性。
DBS的组成p31
- 硬件平台及数据库
- 软件:数据库管理系统、支持数据库管理系统运行的操作系统、具有与数据库接口的高级语言及其编译系统、以数据库管理系统为核心的应用开发工具、为特定应用环境开发的数据库应用及系统
- 人员:
(数据库管理员DBA)决定数据库中的信息内容和结构、决定数据库的存储结构和存取策略、定义数据的安全性要求和完整性约束条件、监控数据库的使用和运行、数据库的改进和重组重构。
(系统分析员和数据库设计人员)(应用程序员)(用户)
DBS结构的分类p27
数据库系统内部的系统结构:三级模式结构
数据库系统外部的体系结构:单用户结构、主从式结构、分布式结构、客户-服务器、浏览器-应用服务器/数据库服务器多层结构
DBMS ppt
工作模式:将数据库语言嵌入到高级语言(宿主语言)中使用
主要功能:【用户角度】数据库定义(定义关系名称、属性名称及要求等),数据库操纵(增删改查检索统计),数据库控制(谁可以用谁不可以),数据库维护
【系统实现角度】语言编译器、查询优化(执行引擎)和查询实现(基本命令的不同执行算法)、数据存取与索引、通信控制
模块组成:数据库语言(用户)+数据库执行例行程序(实现者)
第二章 关系模型
关系的概念和结构p38
关系模型中数据的逻辑结构就是一张二维表
关系的数学定义在集合D1,…,Dk上的关系R是指集合的笛卡儿积的子集,写成R⊆D1×…×Dk,表示为R(D1,D2,...,Dn)。因此,在此定义下,k元关系就是个k元组的集合。
(域)一组具有相同数据类型的值的集合,不同取值的个数叫做【基数】
(笛卡尔积)域上的一种集合运算,给定一组域D1,…,Dk,允许其中某些域是相同的,D1×…×Dk={(d1,d2,...,dk)|di∈Di,i=1...k},其中每一个元素(d1,d2,...,dk)叫做一个【n元组】,简称为【元组/记录】,元素中每一个值di叫做一个【分量】。
(分量)元组中的一个属性值
(关系模式)R(U,D,DOM,I,F),其中R为关系名,U为属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,I是完整性约束规则集,F为函数依赖。(与实体型类似)p42
关系的基本性质:通常提供增删改查等数据操作,其中查询主要用于处理数据的各种检索需求,是数据操作的主要研究对象。关系是动态的,关系模式是静态的
键 p40
【超键】如果一个关系中某个属性或属性集能够唯一地确定一个元组,则称该属性(集)是这个关系上的超键(可以有多余的)
【候选键】如果将超键中的任一属性去掉后剩余的属性集不能唯一标识一个元组,则称该属性集是关系上的候选键。若关系中的某一属性集的值能够唯一得标识一个元组。
【主键】若一个关系中有多个候选键,则选其一作为关系的主键
【外键】如果一个关系R中的某个属性集是另外一个关系S的的候选键,那么称该属性集为关系R上的(来自S的)外键
关系的基本性质:p41
- 列是同质的,来自同一个域
- 不同列可出自同一个域,但不同的属性要给予不同的属性名
- 列的顺序无所谓
- 任意两个元组的候选码不能取相同的值
- 行的顺序无所谓
- 每个分量都是不可分的数据项
关系模型的完整性p45
实体完整性约束:关系的主键中的属性值不能为空。若属性A是基本关系R的主属性,则A不能取空值。
参照完整性约束:若属性(集)F是基本关系R的外键,它与基本关系S的主键Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的取值必须:
·或者取空值 ·或者等于S中某个元组的主码值
用户定义完整性约束:用户针对具体的应用环境定义的完整性约束条件,eg:要求名字在五个汉字字符以内
关系数据语言p48
关系运算包括关系代数和关系演算
关系演算包括域关系演算和元组关系演算
第三章 关系数据库语言SQL
SQL数据库的体系结构
(基本表)SQL中一个关系对应一个基本表
(存储文件)逻辑结构组成了关系数据库的内模式 物理结构是任意的,对用户透明
(视图)从一个或多个基本表导出的“虚表” 用户可以在视图上再定义视图
三级体系结构:外模式(视图) 概念模式(基本表) 内模式(文件)
SQL的组成:如下表以及嵌入式SQL p78
DDL模式数据定义语言 | 定义基本表、视图操作、索引操作 | CREATE,DROP,ALTER |
DML数据操纵语言 | 记录操作 | INSERT,DELETE,UPDATE,SELECT |
DCL数据库控制语言 | 权限管理 | GRANT,REVOKE |
SQL数据定义
操作对象 | 操作方式 | ||
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
SQL函数可以分为标量函数和聚集函数两类
标量函数的运算对象是一个记录行在某个属性上的具体取值 eg:LENGTH()计算一个字符串类型数值的长度,ABS()计算一个数值类型的绝对值
聚集函数:计数COUNT 计算总和SUM 计算平均值AVG 最大最小值MAX MIN
查询学生总人数 SELECT COUNT(*) FROM Student; |
查询选修1号课程的学生最高分数 SELECE MAX(Grade) FROM SC WHERE Cno=’1’; |
求各个课程号及相应选课人数 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; |
计算1号课程的学生平均成绩 SELECT AVG(Grade) FROM SC WHERE Cno=’1’; |
GROUP BY子句 按照所给条件分组,结果相同的放在一起
HAVING子句与WHERE子句的区别:HAVING子句作用于组,从中选择满足条件的组
HAVING子句能用聚合函数,WHERE子句不可以 HAVING可以用的条件是已经筛选出
查询选修了2号课程的学生姓名 SELECT Sname FROM Student WHERE Sno IN(SELECT Sno FROM SC WHERE Cno=’2’); |
【连接查询】连接运算符为= 【自连接】一个表与其自己连接,要给表取别名进行区别
查询每个学生及其选修课程的情况 SELECT S.*, SC.* FROM Student S,SC WHERE S.Sno=SC.Sno; |
查询每门课先修课的先修课 SELECT C1.Cno, C2.Cpno FROM Course C1,Course C2 WHERE C1.Cpno=C2.Cno; |
【外连接】外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出+= =+
【复合条件连接】WHERE子句中含多个连接条件 AND OR ()括号
查询其他系中比软件系某一学生年龄小的学生姓名 SELECT Sname FROM Student WHERE Sage<ANY(SELECT Sage FROM Student WHERE Sdept=’SE’) AND Sdept<>’SE’; |
嵌套查询 SELECT-FROM-WHERE是一个查询块,在WHERE子句或HAVING子句中查询为嵌套查询,嵌套查询不能使用ORDER BY子句 可用=代替IN
带有ANY(SOME)或ALL量词的子查询 某一个值/所有值
某一即为ANY 所有即为ALL
带有EXISTS谓词的子查询
集合查询 并操作UNION 交操作INTERSECT 差操作EXCEPT
查询选修了C001课程并且成绩高于90分的学生学号 SELECT Sno SELECT Sno FROM SC FROM SC WHERE Cno=’C001’ WHERE Cno=’C001’ INTERSECT AND Grade>=90; SELECT Sno FROM SC WHERE Grade>=90; |
SQL数据更新
数据插入
将数据库课程加入到Course表中 INSERT INTO Course(CNO, Cname, Teacher) VALUES(‘SE-06’, ‘数据库系统管理’,’李华’); |
数据删除
将‘01055071’同学选修的“SE-03”课程成绩置为NULL UPDATE SC SET Grade=NULL WHERE SNO=’01055071’ AND CON=’SE-03’; |
数据修改
删除Student表中学号为‘01055123’的学生记录 DELETE FROM Student WHERE SNO=’01055123’; |
SQL视图是不存在具体数据,而仅在数据目录中存放其定义的“虚表”
WITH CHECK OPTION表示对视图进行更新操作时要保证操作行满足视图定义中的谓词条件。
视图的查询即是SELECT查询语句
视图的更新的特点及限制:
1.如果基本表并没有为视图定义中不包含的那些属性列指定缺省值,同时这些列又不允许取NULL,那么该行列子集视图是不能执行INSERT操作的
2.如果视图定义中使用了DISTINCT、GROUP BY分组或者是聚集函数,那么这样的视图无法更新
3.如果视图定义中使用了多表连接或者含有嵌套查询,那么通常情况下该视图不能更新
嵌入式SQL ppt164
即是将SQL语言嵌入到某种高级语言如C、Java中使用,利用高级语言的过程性结构来弥补SQL语言的不足,而嵌入SQL的高级语言称为主语言或宿主语言。
❄为了能够区分SQL语句和主语言语句,所有SQL语句都必须加前缀EXEC SQL
❄在PL/1和C中以分号(;)结束,在COBOL中以END-EXEC结束
数据库工作单元与源程序工作单元之间通信包括 (向主语言程序传递SQL语句的执行状态信息,使主语言能够据此控制程序流程。[主要用SQL通信区实现])(主语言程序向SQL语句提供参数[主要用主变量实现])(查询结果交给主语言程序进一步处理[主要用主变量和游标实现])
⛄ SQL通信区:SQL语句执行后,系统要反馈给应用程序若干信息,主要包括描述系统当前工作状态和运行环境的各种数据,将这些信息送到SQL通信区SQLCA中。
⛄ 主变量:嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。我们把在SQL语句中使用的主语言程序变量简称为主变量。使用主变量及指示变量的方法是,所有主变量和指示变量必须在SQL语句 EXEC SQL BEGIN DECLARE SECTION; 与
EXEC SQL END DECLARE SECTION;中进行说明
⛄ 游标:SQL语言与主语言具有不同数据处理方式,SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录。主语言是面向记录的,一组主变量一次只能存放一条记录。用游标来协调这两种不同的处理方式。游标是系统为用户开发的一个数据缓冲区,存放SELECT语句执行后返回的结果集。
说明性语句】数据定义语句】数据控制语句】查询结果为单记录的SELECT语句】为不使用游标的嵌入式SQL语句。
非CURRENT形式的UPDATE语句】非CURRENT形式的DELETE语句】INSERT语句】为不使用游标的SQL语句
动态SQL:(静态SQL)用户可以在程序运行过程中根据实际需要输入WHERE子句或HAVING子句中某些变量的值。语句中主变量的个数与数据类型在预编译时是确定的,只有主变量的值时程序运行过程中动态输入的。若某些筛选条件在一开始时无法确定,那么就需要用到动态SQL 1)语句可变2)条件可变3)数据库对象、查询条件均可变,为了实现上述三种可变形式,SQL提供了相应的语句,包括:EXECUTE IMMEDIATE、PREPARE、EXECUTE、DESCRIBE等
第四章 数据依赖与关系模式规范化
数据依赖
通过关系中属性间值的相等于否体现出数据间的相互依存和制约关系
是对现实世界中事物间相互联系的抽象,是数据的内在性质,是语义的体现
包括【函数依赖FD】【多值依赖 MVD】【连接依赖 JD】
函数依赖FD:设R为关系模式,r为R上的任意一个关系实例,X,Y是R的两个属性子集,若对于r上的任意两个元组t1,t2,都有:t1[X]=t2[X],则必有:t1[Y]=t2[Y],则称在R上X函数决定Y或者Y函数依赖于X,记为X→Y,X为左部或决定子,Y为右部或被决定子。
平凡函数依赖与非平凡函数依赖:在关系模式R(U)中,对于U的子集X和Y:
如果X→Y,且Y包含于X,则称X→Y是平凡的函数依赖(必然成立)
如果X→Y,且Y不包含于X,则称X→Y是非平凡的函数依赖(其余见纸质版笔记)
Armstrong公理的正确性和完备性
(正确性)如果F=>X→Y 则F|=X→Y
(完备性)如果F|=X→Y 则F=>X→Y
函数依赖集的等价覆盖:F、G是两个函数依赖集合,如果F+=G+,则称F等价于G,或二者相互覆盖。其充要条件是F属于G+,G属于F+。
最小函数依赖集:
- F中所有函数依赖的右部均为单属性
- F中不存在这样的函数依赖X→A及Z属于X,使得F+=(F-{X→A}∪{Z→A})+,即F中所有函数依赖的左部没有多于属性。
- F中不存在这样的函数依赖X→A,使得F+=(F-{X→A})+,即F中没有多余的函数依赖
则称F是最小函数依赖集或最小覆盖。
每个函数依赖集均等价于一个最小函数依赖集。
如何求解最小函数依赖集:
Ⅰ将右部拆分成单属性
Ⅱ考察左部不是单属性的函数依赖,消除多余属性
Ⅲ求解出各函数依赖左部的属性的闭包,消除多余的函数依赖
多值依赖MVD
定义:设R(U)是属性集U上的一个关系模式。X, Y, Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。
关系模式的分解及其问题
设R(U)为关系模式,则称ρ={R1(U1),R2(U2),...,Rl(Uk)}(其中U=∪Ui)为R的一个分解
函数依赖集F在属性集Ui(属于U)上的投影定义为 ΠUi(F)={X→Y | X→Y∈F+ ʌ XY属于Ui}
关系模式的规范化 范式Normal Forms(NF)
关系数据库中的关系模式满足不同程度的规范化要求则称为不同的范式
范式的种类与数据依赖有着直接的联系,基于FD的范式有1NF、2NF、3NF、BCNF等
最低要求为1NF,R为第几范式就写成R∈xNF
【第一范式 1NF】如果关系模式R的每个关系r的属性值都是不可再分的原子值,则R∈1NF。
1NF是关系模式应具备的最起码的条件
包含在任何一个候选键(两种极端情况:单键、全键)中的属性,称为主属性或键属性。不包含在任何一个候选键中的属性,则称为非主属性或非键属性。
求关系模式上的全部候选键:输入关系模式R(U,F),F是最小覆盖。①将R的全部属性分为四类:C1:不在任何函数依赖中出现 C2:仅在函数依赖左部出现的属性 C3:仅在函数依赖右部出现的属性 C4:在函数依赖左部右部均有出现的属性。任何候选键中都会包括C1、C2的属性。②若(C1∪C2)+=U或者C4=Φ,则C1∪C2即为唯一候选键。否则将C4中的属性逐一加入C1∪C2并计算其闭包,若其闭包为U,则C1∪C2加上该属性构成关系上的一个候选键。
【第二范式 2NF】如果关系模式R中的所有非主属性都完全函数依赖于所有候选键,则R∈2NF。2NF是在1NF的基础上消除非主属性对所有候选键的部分函数依赖。
eg: AB→C且B→C则前一个是一个部分函数依赖,不是2NF
【第三范式 3NF】如果关系模式R中的非主属性既不部分函数依赖也不传递函数依赖于R上的所有候选键,则R∈3NF。
3NF是在2NF的基础上消除非主属性对所有候选键的传递函数依赖
【BC范式 BCNF】若关系模式R上的任何一个非平凡函数依赖X→Y都有X必包含R的某个候选键,则R∈BCNF。
如果关系模式R中的每个属性都不传递依赖于R的候选键,则R∈BCNF。
BCNF是在3NF的基础上消除主属性对于键的部份依赖和传递依赖。
在BCNF中,除了键决定其他所有属性这样的函数依赖及其所蕴涵的函数依赖外,不再有其他非平凡函数依赖,特别是左部不含键的非平凡函数依赖。
任何非BCNF的关系模式都可以通过分解规范化为BCNF
【第四范式 4NF】设D是关系模式R上的FD和MVD集合。如果D中每个非平凡的MVD
X→→Y的左部X都是R的超键,则R∈4NF。
判断范式的级别
1* 求出给定关系的所有候选键(可能不止一个)
2* 根据键,确定主属性和非主属性
3* 判断1NF(看属性的值域是否可以分解)
4* 判断2NF(非主属性对键的部分函数依赖)
5* 判断3NF(非主属性对键的传递函数依赖)
6* 判断BCNF(主属性对键的传递函数依赖)
规范化方法
分解成BCNF模式集ρ的算法:输入一个关系模式R和R上成立的函数依赖集F
首先置ρ={R},设ρ中的一个关系模式S不是BCNF,则S中存在函数依赖X→A(A不属于X),且X不是S的键,设S1=XA, S2=S-A,用分解{S1,S2}代替S,观察其是否为BCNF,不是则重复。
分解成3NF模式集σ的算法:将F用最小覆盖替代;找出R中不在F中出现的属性,从R中分离出来组成一个关系模式R0;其余仍为R;将F中的所有函数依赖按照左部相同的原则进行分组,并将每一组函数依赖集所涉及的属性作为σ中的一个关系模式输出。(保持但不一定无损)
分析上述3NF的分解σ是否为无损分解,若不是则求出R的一个候选键X,
并令τ=σ∪{R(X)}。
第五章 数据库设计
(给出一个文字描述、需求,有什么事务、要求,从而画出E-R图)
数据库设计:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护
主要有两种方法:面向数据的设计方法、面向过程的设计方法
需求分析的重点:用户的“数据”和“处理”即信息要求、处理要求、安全性和完整性要求。
概念设计:将用户需求的分析抽象为信息结构概念模型的过程,采用E-R图进行概念设计。
(实体:矩形) (联系:菱形) (属性:椭圆形)
扩充的E-R模型:弱实体(某一个实体的存在以另外一个实体的存在为前提)、普遍化/特殊化(“是...的一种”三角形写ISA)、范畴、聚集(“是...的一部分”)
策略:(自顶向下)先列出个大概的E-R图,再进行添加、细化
(自底向上)先从具体的基本对象开始一一画出E-R图,之后再进行组合
(由内向外)(混合策略)
方法:(集中式模式设计法)将应用需求进行合并统一,设计出全局的概念模式,然后再按照不同的特定应用和用户设计各自的外模式。
(视图集成法)局部视图设计、视图集成:各局部应用的E-R图设计完成后,合并形成一个全局的E-R图。视图集成策略:二元梯形集成、n元集成、二元平衡继承
逻辑设计:在概念设计的基础上给出与DBMS相关的数据库逻辑模式,将E-R图转换为某种具体的数据模型。从E-R图导出初始数据库模式--关系模式规范化--模式评价--模式修正--用DBMS语法描述--进入物理设计阶段。
物理设计:为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程。确定数据的存储结构--确定数据的存放位置--确定数据的存取方法--确定系统配置--对物理结构进行评价。
第六章 数据库物理存储
物理存储与文件
计算机系统的存储体系:将不同的存储器组织在一起满足需求,CPU与内存直接交换信息,外存按存储块进行访问,信息需先装入内存,才能被CPU处理。
磁盘的结构与特性:盘面=>磁道=>扇区
一个磁盘的基本信息:8个圆盘=>16个盘面=>每个圆盘有2^16个磁道=>每个磁道2^8个扇区=>每个扇区有2^12个字节
每个磁盘的容量为2^4*2^16*2^8*2^12=2^40个字节
DBMS数据存储与查询实现的基本思想
数据库之表和记录与磁盘块的映射:连续分配、链接分配、按簇分配、索引分配
数据库之文件组织方法:(文件组织)是指数据组织成记录、块和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及记录和块之间相互联系的方法。(存取方法)是指对文件所采取的存取操作方法,一种文件组织可以采取多种存取方法进行访问。
无序文件组织:方法1 >新纪录插入到文件尾部,直接删除某记录的内容或标记删除
方法2 >在前者的基础上,新纪录可以插入到标记删除的记录空间上。
有序记录文件
散列文件组织:根据一个散列函数来计算其应存放的位置(桶号),用链接法处理溢出
聚簇文件组织:聚簇==将具有相同或类似属性值的记录存放于连续的磁盘块中。
数据库索引
索引是定义在存储表基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一索引项又由索引字段和行指针组成。
索引文件(排序索引文件/散列索引文件) 主文件
索引的分类:
【稠密索引】每一个记录都有一个索引项与之对应,否则为【稀疏索引】
【主索引】对每一存储块有一个索引项,是稀疏索引。
【辅助索引】是定义在主文件的任一或多个非排序字段上的辅助存储结构,必须是稠密索引。
仅有一个主索引,但可以有多个稠密索引
【聚簇索引】是指索引中临近的记录在主文件中也是临近存储的,否则【非聚簇索引】
B+树索引:{要会构建B+树}【多级索引】
一块中有n-1个索引项+1个指针
散列索引:有M个桶,每个桶是有相同容量的存储地。根据散列函数h(k),将键值k映射到{0,1,...,M-1}中的某一个值。将具有键值k的记录存储在对应h(k)编号的桶中。
(静态散列索引)桶的数目M是固定值
(动态散列索引)桶的数目随键值增多,动态增加。h(k)是和桶的数目M相关的。
⛄ 可扩展的散列索引 ⛄ 线性散列索引
位图索引:位图的位数等于记录的个数,在值v的位图中,如果记录在该属性上的值是v,则对应的位为1,否则为0
第七章 查询处理与查询优化
(查询处理)从用户给出查询请求开始,到得出查询结果的过程
(查询优化)从众多策略中找出高效执行策略的过程
是DBMS实现的关键技术
查询处理的步骤:输入查询语句--查询分析(词法分析、语法分析)--查询检查--查询优化(代数优化、物理优化等)--查询执行
查询检查:合法权检查、视图转换、安全性检查、完整性初步检查
·根据数据字典中有关的模式定义检查语句中的数据库对象,检查其是否存在和有效
·根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查
·通过后把SQL查询语句转换为内部表示,即等价的关系代数表达式
·关系数据库管理系统一般用语法分析树来表示扩展的关系代数表达式
查询优化:基于规则、代价、语义
【代数优化/逻辑优化】关系代数表达式的优化。对查询语句进行等价变换(如改变基本操作顺序)使查询执行起来更有效,只涉及查询语句本身,不涉及存取路径。
【物理优化】指存取路径和底层操作算法的选择。根据系统提供的查询路径,选择合理的存取策略(如是选择顺序扫描还是选择索引)
【规则优化】有些查询可根据启发式规则选择执行策略
【代价估算优化】根据供选择的执行策略进行代价估算,并从中选择代价最小的执行策略。
【语义优化】通过应用数据库的语义信息对查询进行优化
查询执行:根据优化器得到的执行策略生成查询执行计划,代码生成器生成执行查询计划的代码。
查询处理的实现方式:(解释执行)DBMS接到查询语句,创建事务,解释执行查询语句,在事务完成后返回查询结果。
(预编译)应用程序经预编译处理,将嵌入的查询语句分出,进行语法词法分析和查询优化,生成一个可执行的访问模块。
查询处理的代价:I/O代价{磁盘存取块数} CPU代价{处理机时间}
在集中式数据库中,查询的执行代价包括> 总代价=I/O代价+CPU代价
在多用户环境下包括> 总代价=I/O代价+CPU代价+内存代价
在网络分布环境下包括> 总代价=I/O代价+CPU代价+网络传输代价
嵌套循环 外关系块加上外关系块存入内存块数×另外一个关系的块数
若有索引,I/O代价会进一步降低,读取的块数也会进一步减少。
当有选择和连接操作时,先做选择操作再连接,这样参加连接的元组会大大减少。
代数优化
使用等价变换规则来优化关系代数表达式,执行一系列已经证明能够优化的策略
投影、选择等一元操作对关系进行水平或垂直分割,减小了关系的大小
而并、连接等二元操作对两个关系按条件组合,操作费时且结果集较大
在变换查询时,尽量先安排执行投影、选择,后进行连接、笛卡尔积。
尽可能早地执行选择操作、投影和选择操作同时进行、选择和其前执行的笛卡尔积合并成一个连接操作、找出表达式中公共子表达式、投影和其前后的二元运算结合起来。
原始查询树:SELECT对应投影 FROM对应笛卡尔积 WHERE对应选择
选择操作下移、投影操作下移、连接条件和笛卡尔积组合成连接操作
物理优化
选择操作的实现方法包括:顺序扫描、利用各种存取路径【B+树、动态散列】
连接操作的实现和优化:连接是从两个关系的笛卡尔积中选择满足连接条件的元组
①嵌套循环 ②利用索引或散列寻找匹配元组法 ③排序归并 ④散列连接
【嵌套循环】顺序扫描外关系的每一个元组,然后与内关系的每一个元组进行匹配
【利用索引或散列寻找匹配元组法】如果内关系有合适的存取路径,用存取路径代替顺序。
【排序归并】首先按连接属性对关系排序,然后进行归并连接
【散列链接】用散列函数将连接属性散列至文件中,对散列到同一个桶中的元组进行匹配。
投影操作的实现:投影操作一般可与选择、连接等操作同时进行,不需要附加I/O开销。
代价估算优化
I/O代价、CPU代价、通信代价
访问磁盘1次所需代价CI/O=D0+x*D1 x是存取数据的大小 D0是与x无关的I/O代价
D1是每个字节所需的传输时间
第八章 事务管理
事务的定义
事务是数据库环境下由一组数据库操作序列组成的逻辑工作单元。事务的执行将保证数据库从一个一致状态变成另一个一致状态。(即银行转账,要么全做就是甲账户减少且乙账户增加,要么全不做,不能只有甲账户减少或乙账户增加)
事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,将事务中所有对数据库的更新写回到磁盘上的物理数据库去,事务结束。
ROLLBACK表示回滚,在事务运行中无法继续执行,将所有操作撤销。
【事务的宏观性】一个存取或改变数据库内容的程序的一次执行,或者一条或多条SQL语句的一次执行为一个事务。
【事务的微观性】对数据库的一系列基本操作的一个整体性执行。事务的并发执行:多个事务从宏观上看是并行执行的,但其微观上的基本操作则可以是交叉执行的。
⭐ 事务的ACID特性⭐ 原子性(逻辑工作单位)、一致性(一致状态到另一个一致状态)、隔离性(一个事务的执行不被其他事务干扰)、持续性(一旦提交,永久改变数据库中数据)
保证多个事务在并行执行时满足ACID性质的措施称为并发控制技术。
恢复和并发控制是保证事务正确运行的两项基本技术,合称为事务管理。
事务涉及两种基本存取操作:Read(X) 从数据库中将数据对象X读入到执行read操作的事务的一个局部缓冲区中。 Write(X) 从执行write的事务的局部缓冲区把数据对象X写入数据库。
事务的状态:对事务所处的状态进行跟踪记录。在发生故障时方便恢复。
活动状态、部分提交状态(事务中最后一条语句被执行后的状态)、失败状态、提交状态(事务在部分提交后,将往硬盘上写入数据,当最后一条信息写入后的状态)、中止状态。
SQL的事务管理:包括恢复和并发控制。
COMMIT [WORK]或ROLLBACK [WORK]
SET TRANSACTION [{READ WRITE |READ ONLY}]
[ISOLATION LEVEL
{READ UMCOMMITTED | READ COMMITTED
| REPEATABLE READ | SERIALIZABLE}]...
数据库系统故障
【事务故障】逻辑错误:内部逻辑上的问题 系统错误:系统进入非正常状态,中断了事务的执行。
恢复程序要在不影响其他事物运行的情况下,强行ROLLBACK该事务:UNDO事务撤销
【系统故障】造成系统停止运转的任何事件,使得系统要重启。影响所有正在运行的事务,数据库缓冲区的内容都被丢失。恢复子系统必须在系统重启时,UNDO强行撤销所有未完成事务,再REDO重做所有已提交事务,将数据库恢复到一致状态。
【介质故障】外存故障:磁盘损坏、磁头碰撞等。将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。破坏性最大。利用其它磁盘上的数据备份或档案数据库进行重构,利用事务日志对所有事务进行REDO。
【计算机病毒】可以自我复制并且具有破坏性的计算机程序。能猫烧香
数据库恢复技术
数据库管理系统(恢复子系统)把数据库从错误状态恢复到某一已知的正确状态(一致状态、完整状态)的功能。
故障恢复的原理:数据库中任何一部分被破坏或不正确的数据可以根据存储在系统别处的冗余数据来“重建”。
建立冗余数据:建立数据备份和事务日志文件。
DBA定期将整个数据库复制到磁带或另一个磁盘上保存起来:后备副本或后援副本。脱机备份(静态备份)和联机备份(动态备份)两种方式
全备份(每次备份全部)、部分备份和增量备份(每次备份上一次备份后更新过的数据)。
数据库日志:是用来记录事务对数据库的更新操作的文件。(以记录为单位/以数据块为单位)(包括各个事务的开始、结束和所有更新操作)(事务标识、操作类型、操作对象、更新数据前后的新旧值)(等级次序严格按照并发事务执行的时间次序,先记日志文件、后写数据库(只是多了一次不必要的REDO操作))利用日志文件把已完成的事务进行重做处理,对故障发生时尚未完成完成的事务进行撤销处理。
恢复的策略
【事务故障的恢复】事务故障是指某事务运行到一半
- 反向扫描文件日志,找到该事务的更新操作 2)对该事务的更新操作进行逆操作 3)继续反向扫描日志文件,找到该事务的其他更新操作继续UNDO 4)一直这样下去知道此事务的开始标记。
【系统故障的恢复】一是未完成事务对数据库的更新已经写入数据库(要UNDO);二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库(要REDO)。
1)正向扫描日志文件,找到在故障前已提交的事务加入REDO队列 2)同时找出未完成的事务加入UNDO队列 3)对UNDO队列中的事务进行UNDO,对REDO队列中的事务进行REDO。
【介质故障的恢复】重装数据库,然后重做已完成的事务。需要DBA介入重装最近备份的后备副本和有关的日志文件副本,然后执行系统提供的恢复命令。
1)重装最近备份的后备副本 2)对于联机备份的数据库副本要同时装入备份开始时刻的日志文件副本,开启REDO+UNDO 3)装入相应的日志文件副本,重做已完成事务
♥采用检查点的恢复技术:[搜索整个日志将耗费大量时间、需要REDO的事务实际上有很多已经写入数据库中,重复执行这些操作也浪费时间] (检查点记录包括建立检查点时刻所有正在执行的事务清单,这些事务最近一个日志记录的地址,重新开始文件用来记录各个检查点记录在日志文件中的地址)周期性建立检查点和保存数据库状态。
- 从重新开始文件中找到最后一个检查点记录在日志文件中的地址 2)由该检查点记录得到检查点建立时刻所有正在执行的事务清单 3)建立两个事务队列:UNDO-LIST REDO-LIST
4)从检查点开始正向扫描日志文件,若有新开始的事务,放入UNDO-LIST,若有提交的事务,放入REDO-LIST队列至文件结束 5)对LIST进行REDO/UNDO操作。
数据库并发控制
串行访问、并发访问。单CPU:交叉并发、多CPU:同时并发。
并发引起的问题:丢失修改(飞机订票)、读脏数据、不可重复读
并发操作破坏了事务的隔离性。并发控制:正确调度并发操作,使一个用户事务的执行不被其他事务干扰。
一个【调度S】指的是对n个事务中的所有操作执行次序的一个安排:不同事务的操作交叉执行,但必须保持同一个事务各个操作的次序。
两个调度S1/S2在数据库任何初始状态下,所有读出的数据都是一样的,留给数据库的最终状态也是一样的:【S1和S2目标等价】。
两个操作op1和op2属于不同事物,针对同一个数据单元,至少有一个写的操作,则【op1和op2是冲突操作】
如果调度中一对连续操作是冲突的,则意味着如果它们的执行顺序交换,则至少改变其中一个事务的最终执行结果。
S是一个调度,将那些通过调换S中不冲突的操作所得到新的调度称为【S的冲突等价调度】。
多个事务并发执行是正确的,当且仅当其结果与某一次序串行的执行它们时结果相同,可串行化的调度
S是一个调度,如果S能与一个串行调度冲突等价,则【S是冲突可串行的】。
可串行性是并发事务正确性的准则,多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行它们时结果相同
前趋图判定一个调度是否可串行。前趋图是一个有向图。前趋图中存在回路,S不可能冲突等价于任何串行调度。不存在回路,可以用拓扑排序得到S的一个等价的串行调度。
用加锁方法实现并发操作调度的可串行性:两段锁2PL协议:将事务分为两段,(获得封锁 扩展阶段)事务可以申请获得任何数据项的任何类型的锁,但是不能释放任何锁(释放封锁 收缩阶段)事务可以释放获得任何数据项的任何类型的锁,但是不能收缩任何锁。加锁是事务在对某个数据对象等操作之前先向系统发出请求,对其加锁。
排它锁X锁写锁(别的事务不能读取、修改),共享锁S锁读锁(别的事务能读不能修改),更新锁U锁:读旧数据,在内存中修改后再将修改后的内容写回,在此过程中除了最后写回阶段,被更新的数据对象仍然可以被其他事务访问。加U锁后仍允许其他事务对其加S锁。待到最后需要写入时,事务再申请将U锁升级为X锁,不必在全程加X锁。
1级加锁协议:事务在修改数据前必须先对其加X锁,直到事务结束才释放。防止丢失修改。
2级加锁协议:1级加锁协议加上事务在读取数据前加上S锁,读完即可释放。防止读脏数据
3级加锁协议:2级加锁协议加上事务在读取数据前加上S锁,直到事务结束才释放。防止不可重复读。
SQL中一致性级别的定义:serializable 一个调度的执行必须等价于一个串行调度的结果
Repeatable read 只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间其他事务不能更新 read committed 只允许读取已提交记录,不可重复读
read committed 允许读未提交记录
死锁:一个事务如果申请锁而没有获准,则其必须等待其他事务释放锁,这就形成事务间的等待关系。当事务中出现循环等待时,如果不加干涉就会一直等待下去。
死锁出现的原因:两个或多个事务已经封锁了一些数据对象,然后又请求对其他事务封锁的数据对象加锁,从而出现死等待。防止死锁的发生:破坏死锁产生的条件
- 一次封锁法:要求每个事务一次将所有要使用的数据进行加锁
- 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事物都按照这个顺序实行封锁。
- 当事务申请锁而未获准时,不是一律的等待,而是让某些事务卷回重执RETRY。为区别事务开始执行的先后,每个事务开始时被赋予一个唯一的并随时间递增的整数(时间标记)
RETRY事务重执1)等待死亡策略年老等待年轻 2)击伤等待策略年轻等待年老
死锁的检测与解除 1)超时法等待时间超过规定时限 2)等待图法有向图存在回路
选择一个处理死锁代价最小的事务将其撤销,释放该事务持有的所有锁,其他事务继续运行
活锁:解决方法采用先来先服务
第九章 数据库安全性
区块链用数字加密学与节点共识的机制来保证数据的安全
数据库的安全性指的是保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
不安全因素:1、非授权用户对数据库的恶意存取和破坏(用户身份鉴别、存取控制和视图)
2、数据库中重要或敏感的数据被泄露(强制存取控制、数据加密存储和加密传输)3、安全环境的脆弱性
《可信计算机系统评估标准关于可信数据库系统的解释》TDI紫皮书:策略、责任、保证、文档。四组七个等级 D C(C1,C2) B(B1,B2,B3) A(A1)
数据库安全性控制
用户标识和鉴别:
数据库安全保护:用户标识和鉴定(最外层,由用户名和用户标识号)、存取控制(定义用户权限,合法权限检查)、视图、审计、数据加密
操作系统安全保护
数据密码存储
用户对某一数据对象的操作权力称为权限,角色是权限的集合,被命名的一组与数据库操作相关的权限叫做角色
自主存取控制DOC C2级,用户对不同的数据对象有不同的存取权限,用户可将其拥有的存取权限转授其他用户。会造成数据无意泄露(由于仅仅通过对数据的存取权限来进行安全控制,对数据本身并无安全性标记)
强制存取控制MAC B1级,每一数据对象被标以一定的密级。每一个用户被授予某一个级别许可证。对于每一个对象,只有具有合法许可证的用户才可以存取。主体是系统中活动实体=数据库管理系统所管理的实际用户,代表用户的各进程。客体是系统中被动实体=文件基本表索引视图。敏感度标记(绝密、机密、可信、公开)主体许可证级别,客体密级
第十章 大数据和云数据管理
大数据
数据类型由关系数据发展到非结构化(获得数据之前无法预知其结构的数据)、半结构化数据。
大数据是指数量特别巨大的信息集合:PB\EB\ZB。是指具有类型繁多、不同结构化程度、不均衡价值密度、不一致动态特征、不同应用处理特征等特点的巨大信息集合。是指无法在可容忍的时间内用传统方法或工具进行获取、存储、检索、共享、分析和可视化的数据集合。
大数据本质特征:面向开放世界;没有确定解,弱化一致性要求;需要覆盖全样本空间;多维度、结构复杂;价值密度稀疏。
信息科技为大数据时代提供技术支持:存储设备容量增加价格下降,CPU处理能力提升,网络带宽不断增加。
大数据的4V特性:体量大、速度快、模块多、真伪难辨。
数据量大,数据类型繁多(10%结构化数据(在数据库中),90%非结构化数据(与人类信息密切相关)),快速处理(1秒定律),价值密度低商业价值高。
大数据处理的需求和特点:扩展性,可用性,灵活性,一致性
大数据架构:分层架构:数据准备、数据存储与管理、计算处理、数据分析和知识展观。
云计算
是一种商业计算模型,将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。
运用由网络连接起来的大量虚拟化的计算设备对信息进行处理并得到结果的一种计算方式。
是分布式计算、并行计算、网格计算的发展
新特征:资源汇聚、快速弹性、按需的自助服务、可控可计量
特点:超大规模、虚拟化、高可靠性、高通用性、高可伸缩性、多租户、按需服务、极其廉价。
云数据管理
是指对存储在云计算环境下的海量数据资源进行有效地组织管理、运行维护的大量分布式数据管理体系架构。
特点:海量性、异构性、不确定性、容错性
限制:扩展困难、读写速度慢、成本高、有限的支持容量
CAP定理:consistency一致性、availability可用性、partition tolerance分区可容忍性
NO SQL(NOT ONLY SQL)数据库
特点:灵活的可扩展性、灵活的数据模型、与云计算紧密融合
NoSQL与关系数据库比较:各有优缺点
关系数据库:电信、银行等领域的关键业务系统,保证强一致性
NoSQL:互联网企业、传统企业的非关键业务(数据分析)