第一章 绪论
1.1 数据库基本概念
1.数据
- 描述事物的符号记录称为数据。如数字、文字、图形、音频等。
- 数据的表现形式不能完全表达其内容,还需要对其解释数据含义。数据的解释就是对数据含义的说明,数据的含义称为数据的语义,数据和语义是不可分的。如93是一个数字,他的语义1是某门课成绩、语义2是某人体重。
- 记录是计算机中表示和存储数据的一种格式。如(李明,男,199505)是一条记录。
2.数据库
- 数据库DB是长期存储在计算机中有组织、可共享的大量数据的集合。
优点:具有较小的冗余度,较高的数据扩展性和易维护性。
- 数据库管理系统DBMS和操作系统一样是计算机的基础软件。
包括1.数据定义功能。2.数据组织、存储和管理功能。3.数据库的事务管理和运行管理。4.数据库的建立和维护功能。
- 数据库系统DBA是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储管理和维护数据的系统。
3.发展阶段
人工管理阶段–>文件系统阶段–>数据库系统阶段。
4.数据库系统的特点
- 数据结构化
指数据不再针对应用,而是面向整个企业或组着。不仅数据内部是结构化的,而且整体是结构化的,数据之间是有联系的。
- 共享性高,冗余度低且容易扩充
- 数据独立性高
1.物理独立性:是指用户的应用程序和数据库中数据的物理存储是相互独立的。
2.逻辑独立性:是指用户的应用程序和数据库的逻辑结构是独立的。
1.2 数据模型
1.数据模型是对现实世界数据特征的抽象。是数据库的核心和基础。
2.两类数据模型1.概念模型,2.逻辑模型和物理模型
- 概念模型
也称信息模型,是按照用户的观点对数据进行建模
- 逻辑模型
包括层次模型、网状模型、关系模型、面向对象数据模型。它是对计算机系统的观点对数据进行建模,主要用于数据库管理系统的实现。
- 物理模型
它描述数据在系统内部的表示方式和存取方法,或在磁盘上的存储方式等,是面向计算机系统的。
1.2.1 概念模型其中一种表示方法:E-R图
1.概念
1.实体:客观存在的并可以相互却别的事物为实体。如一个学生,一个部门,一门课。
2.属性:实体所具有的某一个特性。如学生实体由学号、性别等属性。
3.码:唯一标识实体的属性称为码
4.实体型:相当于一个类–学生类。用属性及实体名刻画同类实体为实体型。如学生(学号,姓名,性别)就是一个实体型
5.实体集:同一类型实体的集合称为实体集。如全体学生、
6.联系:实体内部的联系指实体属性的联系。实体外部的联系指不同实体集之间的联系。有一对多,多对多等类型。
1.2.2 数据模型的组成
1.数据结构:主要描述数据库的组成对象及对象之间的联系。
2.数据操作:对数据库中对象实体等的操作的集合。如增删改查,描述数据的动态特性。
3.数据的完整性约束条件:限定给出的数据模型中数据极其联系所具有的制约和依存规则。
1.2.3 各种模型
- 层次模型:相当于一颗倒立的树,即树结构。只能处理一对多关系。
- 网状模型:相当于图结构。
- 关系模型:即现在数据库中所用的表结构。
1.关系:一个关系对应一张表。
2.元祖:表中的一行即为一个元组。
3.属性:表中的一列即为一个属性。
4.码:也称码键。可以唯一确定一个元组。
5.域:一组相同数据类型的值的集合。如性别的域是(男,女)。
6.分量:元组中的一个属性值。
7.关系模式:对关系的描述。如关系名(属性1,属性2、、、、)。学生(学号,姓名)。
关系的完整性约束:包括实体完整性,参照完整性,用户定义完整性。
关系的每一个分量必须是不可再分的数据项。关系模型中的数据操作对象和操作结果都是关系。
1.3数据库系统结结构
1.3.1系统模式
数据模型中的型和值。
1.型是指对某类数据的结构和属性的说明。如(学号,姓名,性别)。
2.值是具体的值。如(41102,杨,男)。
模式是数据库中全体数据的逻辑结构和特征的描述,仅涉及型,不涉及值。
模式的一个具体值称为模式的一个实例。
模式是相对稳定的,实例是相对变动的。模式反应的是数据的结构及其联系,实例反应的是数据库某一时刻的状态。
1.3.2 数据库三级模式包括外模式,模式,内模式
p28页图
- 模式:也称逻辑模式,是数据库中数据的逻辑结构和特征的描述,
是所有用户的公共数据视图
。它不涉及物理存储也与以具体应用无关。一个数据库只有一个模式,是数据在逻辑级上的视图。
- 外模式:也称子模式,是数据库用户能看见和使用的局部数据的逻辑结构和特征的描述,
是数据库用户的数据视图
。外模式是模式的子集,一个数据库有多个外模式
。外模式是保证数据安全性的一个有效措施,因为只给用户展示部分数据。
3.内模式:也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
一个数据库只有一个内模式。
如数据库存储是堆存储还是按某个字升序。
1.外模式/模式映像(可以有多个):
模式描述的是数据的全体逻辑结构,外模式描述的是数据的局部逻辑结构
。模式改变时(如加新的关系,改变属性),只对外模式/模式的映像做改变,可使外模式保持不变。而应用程序是根据外模式编写的,从而保证了数据的逻辑独立性
。
2.模式/内模式映像(只有一个):它定义了数据全局的逻辑结构与存储结构之间的关系
。当数据库的存储结构改变时,只对模式/内模式进行改变,从而使模式不变,从而使应用程序不变,保持了数据的物理独立性
。
总结:数据的三级模式中,数据库模式即全局逻辑结构是数据库的中心与关键,它独立于其他层次。数据库的内模式依赖于全局逻辑结构,但独立于数据的用户视图,即外模式。也独立于具体的存储设备。数据库的外模式面向具体的应用程序,独立于存储模式和存储设备。数据库的二级映像保证了数据库的稳定性。
note:DDL数据定义语言:定义数据库模式,外模式,内模式。
DML:数据操纵语言:对数据库中数据增删改查。
第二章 关系数据库
2.1
2.1.1 关系
1.域:是一组具有相同数据类型的值的集合。如{0,1},{男,女}。
2.笛卡尔积:是域上的一种集合运算。
3.基数:一个域中允许的不同取值个数称为这个域的基数。
4.候选码:关系中的某一属性组能唯一的标识一个元组,而其子集不能,则称该属性组为候选码。
若一个关系中有多个候选码,则选择其中一个作为主码。候选码的属性为主属性。
5.全码:关系模式中的所有属性都是候选码,则称为全码。
6.关系:关系有三种类型:
①基本关系(基本表):实际存在的表,是实际存储数据的逻辑表示
②查询表:查询出来的表。
③视图表:基本表或其他视图表导出来的表。
2.1.2 关系模式
1.关系数据库中,关系模式是型,关系是值。
关系模式是关系的描述,关系是关系模式在某一时刻的状态和内容。
关系是元祖的集合。
2.2 关系操作
1.五种基本操作:①选择②投影③并④差⑤笛卡尔积
2.关系操作的特点:集合操作方式,即操作的对象和结果都是集合。
2.3 关系的完整性
三种完整性约束:1.实体完整性。2.参照完整性。3.用户定义的完整性。
- 实体完整性规则:主属性不能为NULL。如学号为主码,学号不能为空。
- 参照完整性:F是基本关系R的一个属性,但不是R的码,Ks是S的主码。
若F与Ks相对应,则F是R的一个外码,并称基本关系R是参照关系,S是被参照关系/目标关系。
被参照的关系(目标关系)的属性在这个关系中是主码,参照的属性可以是也可以不是,但称为是参照关系的外码。目标关系的S的主码Ks 和 参照关系的外码F 必须在同一个域上
参照完整性规则就是定义主码与外码之间的引用规则。
参照完整性规则:若属性F是基本关系R的外码,它与基本关系S的主码Ks相对应, 则对于R中属性F上的值必须 取空值或等于S中的某个元组的主码。
- 用户定义的完整性。
如课程(课程号,课程名,学分)。“学分”属性只能取{1,2,3}。
2.4关系代数
2.4.1传统的集合运算
设关系R 关系S有相同的目(即都有n个属性)
1.并:关系R与关系S的并,结果仍为n目。
2.差:R-S结果仍为n目,由属于R不属于S的元组组成。
3.交:既属于R又属于S的元组组成。
4.笛卡尔积:n目的关系R和m目的关系S的笛卡尔积是(n+m)列的元组的集合。k1个元组的R和k2个元组的S的笛卡尔积有k1*k2个元组。
2.4.2专门的关系运算 (p55页)
象集的定义表示R中属性组X上值为x的诸元素在Z上的分量的集合。
1.选择:如查询年龄小于20的学生。(选择一行元组)。
2.投影:选出若干属性列组成新的关系。如查询学生的姓名和所在系。
3.连接:包括等值连接和自然连接。自然连接是一种特殊的等值连接,它将两个元组组合后的同名的属性列去掉合并为一个,如关系R和S,等值连接后存在R.B和S.B,但在自然连接只存在B。
关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元素构成新的关系,此时造成R中或S中有些元组被舍弃了,这些被舍弃的元组称为悬浮元祖。
若把悬浮元祖也保存在结果关系中,而其他属性上填NULL,则这种连接为外连接。若只保留左边关系R中的悬浮元祖叫左外连接,保存右边关系的悬浮元祖叫右外连接。
4.除运算:设关系R除以关系S的结果关系为T,则T中包含所有在R但不在S中的属性极其值,且T的元组与S的元组的所有组合都在R中。用象集来运算。
第三章 SQL概述
3.1 sql的特点
- 综合统一
集合了数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)。并且实体联系均用关系表示,保证了数据操作符的统一。
- 高度非过程化
只要提出做什么,无需指明怎么做,所以不需要了解存取路基。
- 面向集合的操作方式
- 一种语法提供多种使用方式
sql既是独立的语言,又是嵌入式语言。
3.1.1 sql基本概念
1.外模式包括视图和部分表,数据库模式包括若干基本表,内模式包括若干存储文件。
2.存储文件的逻辑结构组成了关系数据库的内模式。
3.2 数据定义
del:sql的定义包括模式定义,表定义,视图和索引的定义。
3.2.1 模式的定义与删除
1.模式创建create schema<模式名> authoriztion <用户名>
①若没有指定模式名,默认为用户名,创建模式必须拥有数据库管理员权限。
②定义模式实际上定义了一个命名空间,在这个空间可以进一步定义该模式包含的数据库对象,如基本表,视图等。
2.模式删除drop schema<模式名><cascade/restrict>
1.cascade(级联),表示删除模式同时把该模式中所有数据库对象删除。
2.restrict(限制),表示如果模式下定义了数据库,则拒绝删除。
3.2.2 基本表的定义与删除
1.创建一个表
create table sc(Sno char(9),Cno char(10),Grade int,Primary key(Sno,Cno), Foreign key(Sno) References Student(Sno)
Sno是外码,被参照表是Student。
2.模式与表一个模式对应多个基本表,每一个基本表都属于一个模式。
给表定义模式的三种方法:
1.表名显示的给出:create table “s-t”.Student(…)。
2.创建模式语句后边跟着创建表。
3.设置所属的模式。如set search_path to “s-t”,public。然后create table student(…)。结果是建立了s-t.student基本表。
3.删除基本表drop table <表名> [restrict/cascade]
默认情况是restrict,即存在相关的约束则不能被删除。选择cascade则定义的索引,触发器都被删除。
3.2.3 索引的建立
1.建立索引create [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>)
create unique index Stusno ON student(Sno)
2.修改索引alter INDEX <旧索引名> RENAME TO<新索引名>
3.删除索引DROP INDEX <索引名>
3.2.4 数据字典的定义
数据字典是关系数据库管理系统内部的一组系统表,记录了数据库中所有的定义信息,包括模式定义,视图定义,索引定义等。在执行sql语句时候,实际上就是在更新数据字典里的相应信息。
3.2.5 嵌套查询
一个select-where是一个查询块,将另一个查询块的where子句或having条件中的查询称为嵌套查询。
子查询不能用order by,order by只对最后结果排序。
不相关子查询:子查询块的查询条件不依赖于父查询。
相关子查询:子查询块条件依赖于父查询。
3.2.6 集合操作
集合操作包括并操作UNION,交操作INTERSECT,差操作EXCEPT。
3.2.7 派生表
子查询出现在from语句后边,这时子查询生成的临时派生表成为主查询的查询对象。
3.2.8 空值
空值的约束条件:①属性定义有NOT NULL不能为空。②加了UNIQUE限制不能为空。③码属性不能为空。
3.3 视图
1.建立视图create view<视图名> [(<列名>[,<列名>]...)] AS <子查询> [WITH CHECK OPTION];
1.关系数据库执行create view时只把视图定义存入数据字典,并不执行select,只在查询视图时从基本表中查出。
2.如create view is_student as select from student where sdept = 'IS' WITH CHECK OPTION
。其中with check option 表示以后对视图进行增删插时,会自动加上sdept=‘is’的条件。
1.行列子集视图:
视图中保留了主码。
2.带表达式的视图:派生出一些属性列,在实际表中不存在,则称为虚拟列,也叫带表达式的视图。
派生表视图只是在语句执行时临时定义,执行后定义就被删除,而一般的视图定义会永久保存在数据字典。
3.分组视图:用带有聚集函数和GROUP BY子句的查询定义视图,为分组视图。
2.删除视图DROP VIEW <视图名> [CASCADE]
。执行后视图定义将从数据字典中删除。仅仅删除基本表不能删除数据字典中的视图定义。
3.视图的作用:①简化用户的操作。②使用户能多角度看同一数据。③对重构数据库建立了一定的逻辑独立性。④能对机密数据提供安全保护。
NOTE:1.一般情况,行列子集视图是可更新的。视图来自多个表,字段表达式,聚集函数,group by则不能更新。
2.SQL可以分为数据定义,数据查询,数据更新,数据控制四大部分。
第四章 数据库安全性
4.1 数据库安全性概述
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露,更改或破坏。
4.1.1 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏。
采用用户身份鉴别,存取控制和视图解决。
- 数据库中重要的数据泄露。
采用强制存取控制,数据加密存储,加密传输及审计日志。
- 安全环境的脆弱性。
保证计算机硬件,操作系统,网络的安全性,即建立一套可信的计算机系统标准。
4.2 数据库安全性机制
主要包括1.用户身份鉴别。2.多层存取控制。3.审计。4.视图。5.数据加密等
4.2.1 用户身份鉴别
每最外层保护机制。每个用户标识由用户名和用户标识号组成。
身份鉴别方法
- 静态口令鉴别:一般用户自己设定。
- 动态口令鉴别:如qq动态命令一样。
- 生物鉴别:指纹,人脸。
- 智能卡鉴别:如刷卡门。
4.2.2 存取控制机制组成
存取控制主要包括定义用户权限和合法权限检查两部分。
定义用户权限:对某一数据对象的操作权称权限,DBMS提供适当的语言定义用户权限,存放在数据字典,称为安全规则或授权规则。
合法权限检查:用户发出存取数据库操作请求,DBMS查找数据字典,进行合法权限检查。
用户权限定义和合法权检查机制一起组成了DBMS的存取控制子系统
用户权限组成数据库对象和操作类型
,即在哪个数据库内有怎样的操作权限。
自主存取控制:将自己的权限授予他人,并可将授予权限的权限授予他人。
4.2.3 自主存取控制(数据库安全–预防措施)
1.用户对不同数据对象有不同存取权限。
2.不同用户对同一对象有不同权限。
3.用户可将拥有的存取权限授权其他用户。用GRANT 和 REVOKE实现。
①GRANT语句的一般格式:GRANT<权限> ON <对象类型> TO<用户> [WITH GRANT OPTION]。
②REVOKE回收权限:REVOKE<权限> ON <对象类型>FROM <用户>
②创建数据库模式的权限:ccreate user<username> [with] [DBA,RESOURCE,CONNECT] 1.connect权限仅能登陆,不能创建表和视图,不能创建模式。 2.resource权限能创建基本表和视图,不能创建模式 3.DBA权限相当于系统中超级用户。
自主存取控制缺点:存在数据的无意泄露,因为它仅对数据的存取权限进行安全控制,数据本身无安全性标记
4.2.4 数据库角色①角色是权限的集合。②为一组有相同权限的用户创建一个角色。③使用角色可以讲话授权的过程,使得自主授权更灵活。
1.角色的创建:grant role <角色名>。
2.角色授权:GRANT <权限> ON <对象类型> TO <角色>
WITH ADMIN OPTION拥有某权限的角色可将这种权限授予其他角色。
4.2.5 强制存取控制(数据库安全–预防措施)
1.是对数据本身进行秘密标记,无论数据如何复制,标记与数据不可分,只有符合密级标记的用户才可
操作数据,提高了数据的安全性。2.用户不能直接感知。
☆敏感度标记:
1.强制存取控制分为主体和客体,而DBMS为他们指派一个敏感度标记。
2.敏感度标记分为:绝密,机密,可信,公开。
强制存取控制规则:①只有主体的许可证级别大于等于客体密级时,才能读客体。②只有主体的许可证级别小于等于客体密级才能写相应客体。
☆强制存取控制MAC的实现必须先实现自主存取控制DAC:因为高安全性级别保护要包含低级别的
所有保护。
强制存取控制和自主存取控制共同构成了数据库系统的安全机制。
4.2.6 视图机制(数据库安全–预防措施)
把保密的数据对无权存取这些数据的用户隐藏起来,保护数据安全性。
4.2.6 审计(数据库安全–监控措施)
将数据库的操作自动记录下来。
☆审计的对象
- 服务器事件。
- 系统权限。
- 语句事件。
- 模式对象事件。
4.2.7 数据加密
1.数据加密包括存储加密和传输加密。防止数据库中数据在存储和传输中失密的有效手段。
加密思想是将原始数据–明文变换为不可识别的格式–暗文。
1.存储加密:①
透明存储加密:
内核级加密保护方式,对用户透明。写磁盘时对数据加密,授权用户解密后才能读取。。优点:性能好,安全完备性高。②非透明存储加密:
通过多个加密函数实现。
2.传输加密:①链路加密
:分为报文和报头,两者都加密。②端到端加密
:发送端加密,接收端解密
第五章 数据库完整性
数据库的完整性指数据的正确性和相容性。
1.正确性:是指数据符合现实世界语义,如学号必须唯一,性别只能男女。
2.相容性:指数据库同一对象在不同关系中的数据是符合逻辑的。如学生选的课必须是已开的课。
为维护数据的完整性,数据库管理必须:
- 提供定义完整性约束条件的机制:数据必须满足的语义约束条件。
- 提供完整性检查机制:一般在insert ,update等执行后或事务提交时检查。
- 违约处理:用户操作违背完整性约束条件后应①拒绝执行。②级连其他操作:先去执行其他操作,去除掉约束条件。
1. 实体完整性和参照完整性
1.实体完整性:相当于定义主码。定义为行级或表级约束条件。
1.实体完整性检查:1.检查主码是否唯一。2.检查主码属性是否为空。
1.检查唯一方法:全表 扫描,效率低,可建立索引。
2.参照完整性:相当于定义外键。
2.参照完整性检查和违约处理:当外键与另一表的主码对不上时,可以①拒绝执行(默认)。②级联操作:修改或删除所有不一致的操作。③设置为空值:将参照表中造成不一致的元组对应属性设为空。
2.用户定义的完整性
1.属性上的约束条件:①非空。②列值唯一。③是否满足一个条件表达式。
2.元祖上的约束条件:可以限制一个元组上不同属性值之间的约束。用check。
上两个不满足时DBMS都会拒绝执行。
3. 完整性约束命名子句
1.定义完整性约束命名子句CONSTRAINT <完整性约束条件名> <完整性约束条件>
2.修改完整性限制DROP CONSTRAIONT<约束条件名>。
4. 断言
声明断言可以指定更具一般性的约束。可定义涉及多个表和聚集操作的复杂约束。使断言不为真的操作
都会拒绝执行。
★创建断言CREATE ASSERTION <断言名> <CHECK 子句>
5 触发器只能定义在基本表上,不能定义在视图。
1.是定义在关系表上的一类由事件驱动的特殊过程。2.任何对表的增删改均有服务器自动激活相应
触发器。3,触发器可以实施更为复杂的检查和操作,更强大的数据控制能力。
第六章 关系数据理论
1.第一范式:每一个分量必须是不可分的数据项。
第一范式会出现的问题。1.数据冗余:如系主任名字重复出现。
2.更新异常:某系换主任后,必须修改与该系有关的学生信息。
3.插入异常:若一个系刚成立,没有学生,则无法插入数据库。
4.删除异常:某个系学生毕业了,那么系主任信息也丢掉了。
数据依赖是关系内部属性与属性之间的一种约束关系,是现实世界相互联系的抽象。
它包括函数依赖和多值依赖。
1.函数依赖:普遍的存在现实生活。如姓名–>年龄这个函数依赖,只有在无同名情况成立。Y=F(X),即X–>Y,Y函数依赖与X。
2.完全函数依赖:若X–>Y,对X任意一个真子集X’,不存在X–>Y,则Y对X完全函数依赖。
3.部分函数依赖:X–>Y,Y不完全依赖于X,则称Y对X部分函数依赖。
4.候选码:若K–>U为完全函数依赖,则K为R的候选码
。若U部分依赖于K,则K为超码
。包含在任何一个候选码中的属性为主属性
。
2.规范化即低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这过程就是规范化。
3.第二范式:每个非主属性都要完全依赖任一个主码。即若R属于第一范式,且每个非主属性完全依赖于任何一个候选码,则属于第二范式。
第二范式会出现的问题:
1.插入异常:若一个关系码为课号,插入一个未选课的学生,则插入不进去。
2.删除异常:若一个学生仅能选一门课,若学生不选了,课号作为主码就会异常。
3.第三范式:每个非主属性既不传递依赖于码,也不部分依赖于码。
若R属于3NF,则必属于2NF。
4.BCNF:1.所有非主属性对每一个码都是完全函数依赖。 2.所有主属性对每个不包含它的码也是完全函数依赖。3.没有任何属性完全函数依赖于非码的任何一组属性。
若R属于BCNF,则必属于3NF,反之不对。如U(T,C,B)的码是(T,C,B),则U属于BCNF。
5.多值依赖:设在关系模式中U(C,T,B)。T中有三个分量T1,T2,T3,B中有两个分量B1,B2。若对于(C,T1)有一组B(B1,B2),但仍存在一组(C,T2)推出B(B1,B2),则C-->B。称B多值依赖于C。
多值依赖的性质
1.对称性:若X---->Y,则X---->Z,其中Z=U-X-Y;
2.传递性:X---->Y,Y----Z,则X---->Z-Y;
3.函数依赖可以看做多值依赖的特殊情况。
6.4NF:限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
一个关系是4NF,则必是BCNF。
7.规范化的思想:消除数据依赖中不合适的部分。
1NF->2NF:消除非主属性对码的部分函数依赖。
2NF->3NF:消除非主属性对码的传递函数依赖。
3NF->BCNF:消除主属性对码的部分和传递函数依赖。
BCNF->4NF:消除非平凡且非函数依赖的多值依赖。
第七章 数据库设计
数据设计六个阶段
- 需求分析阶段。
- 概念设计阶段:对用户需求归纳称一个概念模型,即E-R图。
- 逻辑设计阶段:对概念结构转换为数据库支持的数据模型。
- 物理设计阶段:为逻辑数据模型选取合适的物理结构(存取结构和存取方法)。
- 数据库实施阶段。
- 数据库运行和维护阶段。
7.2 需求分析阶段
1.调查需求。
2.数据字典:是详细的数据收集和分析获得的主要成果,它是关于数据库中数据的描述,即元数据,它不是数据本身。在需求分析阶段建立,数据库设计中不断完善。
数据项是数据最小的组成单位。数据字典包括①数据项,数据结构,数据流,数据存储,处理过程。
7.3 概念结构设计
概念模型特点真实反应现实,易于理解,易于更改,易于向关系,网状各种数据模型转化。
实体内部的联系:实体的各属性之间的联系。
实体之间的联系:不同实体型的实体集之间的联系。
实体型:如课程,教师,参考书都是实体型。
实体集内的各实体联系:如职工内有领导与被领导的关系。
度:参与联系的实体型的数目成为联系的度。n个实体型之间的联系称为N元联系。
弱实体型:一个实体型的存在依赖于其它实体型的存在,为弱实体型。一般的若不能从一个实体型 都的属性中找到作为码的属性就是弱实体型。
如贷款中生成的还款实体。
1.实体与属性:
1.作为属性,不能再具有需要描述的性质,即必须是不可再分的数据项,不能包含其他属性。
2.属性不能与其他实体具有联系。如货物存放在仓库,有仓库号属性,但仓库号又与相应的员工属性对应,则仓库号应作为实体,不是属性。
2.ER图的集成:
1.通常采用的策略是
自顶向下的需求分析,自底向上的设计概念结构。
即将各实体的er图集成。
2.E-R图集成分两步:①合并:解决ER图之间的冲突。②修改和重构:消除冗余,生成基本er图。
7.2.1 冲突 子系统的ER图有三类冲突。
- 属性冲突(2类)。
①属性域冲突:即属性的类型,取值范围不同。如零件号有的部门为整数,有的为字符。
②属性取值单位冲突:如有的以公斤为单位,有的以斤为单位。
- 命名冲突(2类)。
①同名异义:不同意义的对象在不同局部有相同名字。
②异名同义:同一意义的对象不同局部名字不同。
- 结构冲突(3类)。
①同一对象在不同应用中有不同抽象:如职工某一局部当实体,另一部分当属性。
解决办法:
统一实体或属性。
②同一实体在er图所包含的属性不同。解决办法:
取并集。
③实体间联系在不同er图为不同类型:如一个图中1对1,另一个是1对多。解决办法:
根据语义对实体联系类型进行调整。
7.2.2 消除不必要冗余 设计基本er图
冗余的数据是可由基本数据导出的数据。
冗余的联系是可由其他联系导出的联系。
两者容易破坏数据库的完整性,给数据库维护增加困难。消除冗余①主要采用分析方法,即以数据字典和数据流图为依据,根据数据项之间逻辑关系的说明来消除冗余。②采用规范化理论。
7.4 逻辑结构设计
概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念设计阶段设计
好的基本er图转换为选用数据库所支持的数据模型
ER图组成:实体型、实体的属性和实体型之间的联系。
ER图转换为关系模式:就是将上三个组成的联系转换为关系模式,关系的属性就是实体的属性,关系的码就是实体的码。
主要由五种不同情况:
- 对于1比1的联系:①转化为独立的关系模式:则与该联系相连的各实体的码与以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。②若与某一端实体对应的关系模式合并,则在该关系模式的属性中假日另一个关系模式的码和联系本身的属性。
- 对于1比n的联系:①转换为独立的关系模式:与1比1类似,与该联系相连的各实体的码与以及联系本身的属性均转换为关系的属性,关系的码仅为n端实体的码。②与n端对应的关系模式合并。
- m比n的联系:转换为一个关系模式:与该联系相连的各实体的码与以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码。
- 三个或三个以上实体间的多元联系同m比n的联系一样。
- 相同码的关系模式可以合并。
7.5 物理结构设计
数据库在物理设备上的存储结构与存取方法成为数据库的物理结构。
数据库的物理设计分为两步:①确定数据库的物理结构:即存取方法和存储结构。
②对物理结构进行评价:评价重点是时间和空间。
物理设计主要内容包括关系模式选择存取方法,以及设计关系,索引等数据库文件的物理存储结构。
7.5.1 关系模式(数据)存取方法
- 索引方法:常用的属性组加入索引,常更新的不加。
- 聚簇存取:把属性上具有相同值的元组集中存放在连续的物理块中称为聚簇。该属性组称为聚簇码。从而提高查询速度。常在含有ORDER BY,UNION 时使用聚簇有利,可省去结果集的排序。
一个数据库可有多个聚簇,一个关系(一个表)只能有加入一个聚簇,建立聚簇开销大。
7.5.2 确定数据库的存储结构(数据的存放位置)
将易变部分与稳定部分,常存取和不常存取分开存放。
7.5.3 评价物理结构
以时间,空间,维护代价,各种用户要求进行权衡。
7.6 数据库的实施和维护
1.实施阶段:两项工作:①DDL创建数据库结构,如基本表,视图。②数据的载入。②应用程序的编码和调试。
2.试运行:小部分数据入库后,就对数据库系统进行联合调试,称为试运行。
少量数据入库运行合格再逐步加入数据,也要做好数据转存和恢复工作。
7.7 数据库的运行和维护
- 数据库的转存和恢复
- 数据库的安全性和完整性控制
- 数据库性能的监督分析和改造:
运行阶段,对数据检测,找出改进性能的方法。
- 数据库的重组织与重构造:
不断的增删改查会使物理存储情况变坏,性能下降,所以要进行重组织。由于数据库环境改变,如增加新的实体,需要改变数据库的模式和内模式。☆☆☆数据库的重组织不修改逻辑和物理结构,而数据库的重构造会部分修改数据库的模式和内模式。
第八章 嵌入式编程
8.1 嵌入式SQL
SQL语句负责操纵数据库,高级语言控制逻辑流程。
8.1.1 嵌入式sql语句与主语言之间的通信
1.SQL通信区:sql语句执行后返回的信息存回sql通信区。SQL通信区中变量SQLCODE存放每次执行SQ L语句返回的代码。
2.主变量:使用的主语言程序变量为主变量。①输入主变量:应用程序对其赋值,sql语句引用。②输出主变量:sql语句赋值,返回给应用程序。
3.游标:sql是面向集合的,执行结果有多条记录,主语言是面向记录的,所以主变量不能满足sql输出数据的要求,使用游标来协调。
游标是一个数据缓冲区,存放sql语句的执行结果。
说明性语句,数据定义语句,数据控制语句,查询结果为单记录的select语句不需要使用游标。
当查询结果为多条数据记录时使用游标。
8.1.2 动态sql
静态sql语句:嵌入式sql语句的主变量,查询目标列,条件都是固定的,属于静态sql。
动态sql语句:允许程序运行过程中临时组装sql语句。包括动态组装sql语句和动态参数(赋值先用?)两个形式。
第十章 数据库恢复技术
10.1 事务的基本概念
1.事务:是用户定义的一个数据库操作序列,可以使一条,一组sql语句或整个程序,这些操作要么全做,要么全不做。
一个程序包含多个事务。事务的开始和结束可由用户显示控制。
事务的开始以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
1.COMMIT:表示事务的一系列操作都成功执行,对数据库的更新写回数据库了。
2.ROLLBACK:表示事务运行中发生了故障,将已完成的操作全部撤回,回滚到事务开始状态。
2.事务的ACID特性:
- 原子性:
事务是数据库的逻辑工作单位,事务中操作要么全做要么全不做。
- 一致性:
即事务的结果必须是一个一致性状态到另一个一致性状态,即不能出错导致前后不一致。
- 隔离性:
一个事务的执行不能被其它事务干扰。
- 持续性:
也称永久性,指一个事务一旦提交,对数据库的改变是永久的。
事务是恢复和并发控制的基本单位。
☆事务ACID特性被破坏的因素:
多个事务并行运行时候,不同事务操作交叉执行。
解决:数据库应保证多个事务交叉运行不影响事务的原子性。事务运行过程中被强行停止
。解决:数据库管理系统要保证被强行终止的事务对数据库和其他事务没有影响。
10.2 故障的种类
1.事物内部的故障:有的可以通过事务程序本身发现,如转账过程余额不足。有的不可以发现被处理,即非预期的,如运算溢出,并发事务发生死锁而撤销。
事务撤销(UNDO):
事务故障使得没有到达预期,数据库可能是不正确状态,所以要在不影响其他事务情况下,强行回滚事务,即撤销事务对数据库所做的任何改变,这类恢复称为事务撤销(UNDO)。
2.系统故障:
指造成系统停止运转的任何事件:如硬件故障,系统断电。
重做(REDO):
事务回滚时,撤销所有为完成的事务,但还有一些已完成的事务留在缓冲区,未写回磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分丢失,导致数据库不一致。因此应将这些事务已提交的结果重新写入数据库,所有系统重新启动后,回复子系统除了撤销未完成的事务,还要重做(REDO)所有已提交的事务,使数据库恢复到真正的一致性。
3.介质故障:
系统故障为硬故障,介质故障为软故障。
4.计算机病毒。
10.3 恢复的实现技术
恢复机制两个关键问题:①如何建立冗余数据。②如何利用冗余数据实施数据库恢复。
建立冗余数据常用的方法是①数据转储。②登记日志文件。通常两个方法一起用。
10.3.1 数据转储
概念:数据库恢复中常用的基本技术。即数据库管理员定期将整个数据库复制到磁盘或其他介质保存起来。这些数据称为后备副本。
但数据转储只能将数据库恢复到转储时的状态,若转储后到故障发生更新事务,需要重新运转这些事务。
转储的分类:
静态转储:
转储时不能运行其他事务。能保证得到的是一个数据一致性的副本。动态转储:
转储期间允许对数据库进行存取或修改。他克服了静态转储的缺点,即不用等待正在运行的事务结束,也不会影响新事务的运行。但不能保证转储结束后援数据正确有效。所以,必须把转储期间进行的事务记录下来,建立日志文件。海量转储:
每次转储全部数据库。增量转储:
每次只转储上一次转储后更新的数据。
综上:数据转储可分为4类:①动态海量转储。②动态增量转储。③静态海量转储。④静态增量转储。
10.3.2 登记日志文件
1.日志文件的格式和内容:日志文件是记录事务对数据库的更新操作的文件。
2.日志文件的分类:
- 以记录为单位的日志文件:
登记内容:①事务开始标记。②事务结束标记。③事务的所有操作。每个标记和更新操作都是一个日志记录。
每个日志记录内容包括:①事务标识。②操作类型。③操作对象。④更新前和更新后的值。
- 以数据块为单位的日志文件:
日志记录内容包括:①事务标识。②被更新的数据块。
3.日志文件作用:①事务故障恢复。②系统故障恢复。③协助后备副本进行介质故障恢复。
- 事务故障和系统故障恢复必须用日志文件。
- 动态转储必须用日志文件记录转储过程的更新操作来有效恢复数据块。
- 静态转储也可以用日志文件恢复从转储到出现故障之间的已完成的事务的重做处理,并对故障发生时尚未完成的事务进行撤销处理。
4.登记日志文件规则:为保证数据块可恢复,登记日志必须遵循两条原则:
- 登记次序严格按照并发事务执行的时间顺序。
- 必须先写日志,后写数据库。
10.4 恢复策略
1.事务故障的恢复:事务故障指事务运行到正常终点前被终止,这时恢复子系统利用日志文件(UNDO)撤销此事务已对数据库做的更改。
事务故障的恢复是系统自动完成,对用户透明。
系统恢复步骤:
①反向扫描日志文件,查找更新操作。
②对事务的更新进行逆操作:如记录中是插入,则删除,是修改,则将更新前数据写入。
③继续反向扫描日志文件,做同样处理,直到书屋的开始标记,就恢复完成。
2.系统故障的恢复造成系统故障原因两个:1.未完成事务对数据库的更新可能已写入数据库。2.已提交事务对数据库的更新还留在缓冲区没写入数据库。
系统恢复是重启时自动完成的,不用用户干预。
系统恢复步骤:
①正向扫描日志文件,找出故障发生前已提交的事务(做完的事务),将其标记入重做队列(REDO-LIST)。找出故障发生时未完成的事务(没做完的事务),将其标记入撤销队列(UNDO-LIST)。
②对撤销队列的各个事务撤销(UNDO)处理:即反向扫描日志,对撤销事务进行逆操作,撤销故障发生时未完成的事务
③对重做队列各个事务进行重做处理:即正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作。重做已完成的事务
3.介质故障的恢复介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的故障。
恢复方法是重装数据库,然后重做已完成的事务。
①装入最新的数据库后备副本(离故障最近的一次),使数据库恢复到最近一次转储时的一致性状态。对于静态转储能直接保持一致,动态转储需要结合日志。
②装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。即先扫描日志文件将故障发生时已提交的事务的标识(即做完的事务需要重做),将其加入重做队列。然后正向扫描日志文件,对重做队列的所有事务进行重做处理。
介质故障需要数据库管理员介入,需要重装近期的数据库副本和日志文件副本
10.5 检查点恢复技术
问题的提出:日志恢复存在两个问题:1.搜索整个日志耗费大量时间。2.重做处理,浪费大量时间(一些重做的处理事务已经将数据更新到数据库)。
结局方案:日志文件中增加检查点记录,增加重新开始文件(独立于日志文件),恢复子系统登录日志文件期间动态维护日志。
第十一章 并发事务
11.1 并发控制概述
1.交叉并发方式:单处理机系统中,事务的并发是并行事务的操作轮流交叉运行。
2.同时并发方式:多处理机中,每个处理机执行一个事务,是真正的并行运行。
事务是并发控制的基本单位。
3.并发控制带来的数据不一致性有三种:
丢失修改
:事务T1和T2同时读同一数据并修改,T2提交结果破坏了T1的结果。如同时对15-1,得到14.不可重复读:
指事务T1读数据后,T2更新操作,使得T1无法再现前一次读取结果。
不可重复读包括三种情况:
①T1读取数据后,T2进行数据修改,T1再读时数据前后不一样。
②T1读取数据后,T2进行了数据删除,T1再读数据消失。
③T1读取数据后,T2词进行了数据插入,T1再读数据增多。
后两种也称幻影现象。
读“脏数据”:
T1修改某数据后写回磁盘,T2读取同一数据后,T1又因为某原因被撤销,T2读到的数据与数据库不一致了。如T1将C值改为200,T2读到200,后T1又被撤销导致C改为100.
4.并发控制的主要技术:1.封锁。2.时间戳。3.乐观控制法。3.多版本并发控制。
11.2 封锁
封锁是实现并发控制技术之一。封锁就是事务T曹总某个对象时候,向系统发出请求进行加锁。
之后其他事务不能更新此对象。
1.两种封锁类型:
1.排它锁:事务T对数据对象A加上X锁,只能对其读和修改,其他事务不能对A加任何锁,直到释放。
2.共享锁:事务T对数据对象A加上S锁,可以对A读但不能修改,其他事务也能对A加S锁,但不能加X锁,直到释放。
11.3 封锁协议
在运用X锁和S锁时候,还需要约定一些规则。如何时申请S锁或X锁,持锁时间,何时释放等。这些称为封锁协议,
1.一级封锁协议:指事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
可防止丢失修改,并保证事务T是可恢复的。因为读数据时不修改,所有不需要加锁,但不能保证可重复读和不读“脏”数据。
2.二级封锁协议:在一级封锁协议基础上增加事务T读数据R之前必须加S锁,读完后可释放。
即防止丢失数据,又防止读“脏”数据。
3.三级封锁协议:在一级封锁协议基础上增加事务T读数据R之前必须加S锁,直到事务结束才释放。
防止丢失数据,防止读“脏”数据,又进一步防止了不可重复读。
11.4 活锁和死锁
1.活锁:T1申请了R,T2也申请R,T3也申请R,T1释放后给T3,T4接着申请R,T3释放后给T4,T2永远得不到资源,即活锁。
解决办法:采用先来先服务。
2.死锁:``
3.预防死锁的两种方法:
1.一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则不能执行。但降低了系统的并发度。
2.顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按照这个顺序实施封锁。
11.5 并发调度的可串行性
11.5.1 可串行化调度
def:多个事务的并发执行是是正确的,当且仅当其结果与按照一次序串行执行这些事务的结果相同,则称这种调度为可串行化。
可串行性是并发事务正确调度的准则。一个给定的并发调度,当且仅当它是可串行化的才认为它是正确调度。