第一章 绪论
1.1.1数据库的4个基本概念
-
数据(Data):描述事物的符号叫做数据。这些符号可以是数字、文字、图形、图像、音频、视频等,数据具有多种表现形式,它们都可以经过数字化后存入计算机。数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是密不可分的。
如一条数据(李明,男,199505,江苏南京市,计算机系,2013)
数据的形式不能表达其内容,所以有了语义。上一条数据的语义:(学生姓名,性别,出生年 月,籍贯,所在系别,入学时间)
语义就是对数据的解释。 -
数据库(DataBase,DB):数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并且可以为各个用户共享。其具有永久存储、有组织、可共享,三个基本特点。
-
数据库管理系统(DataBase Management System,DBMS):数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。 DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。
-
数据库系统(DataBase System,DBS):数据库系统是由数据库、数据库管理系统、应用程序、数据库管理员(DataBase System Administrator,DBA)组成的。它是一个存储、管理、处理和维护数据的系统。
1.1.2数据库管理技术的产生和发展
人工管理阶段➡文件系统管理阶段➡数据库系统管理阶段
1.2.1 两类数据模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-saRM7whx-1669650533137)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221104112317533.png)]
1.2.2概念模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEjxuLtY-1669650533138)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221104112013021.png)]
1.2.7关系数据模型的数据结构
关系术语 | 一般表格的术语 |
---|---|
关系名 | 表名 |
关系模式 | 表头(表格的描述) |
关系 | 二维表 |
元组 | 记录或行 |
属性 | 列 |
属性名 | 列名 |
属性值 | 列值 |
分量 | 一条记录中的一个列值 |
非关系模式 | 表中有表 |
主码 | 元组中某个属性组,可以唯一确定一个元组 |
域 | 属性取值范围 |
关系模式 | 对关系的描述关系名(属性1,属性2……) |
1.3.2数据库系统的三级模式结构
数据库系统的三级模式结构由外模式、模式和内模式组成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ul5kVgox-1669650533139)(https://uploadfiles.nowcoder.com/images/20190218/470378439_1550463369888_1ABAA32B5B0B3867D806946622E28043)]
模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。
一个模式可以对应多个外模式,对于每一个外模式,数据库都有一个外模式/模式映像。
数据的逻辑独立性:模式改变时,对应的外模式/模式映像发生改变。应用程序是根据外模式编写的,从而应用程序不必,保证了数据与程序的逻辑独立性
数据的物理独立性:数据库的物理结构改变时,对应的模式/内模式映像发生改变,可以使模式保持不变,从而应用程序保持不变,保证了数据与应用程序的物理独立性。
-
外模式,亦称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
-
模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。
-
内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。
数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给 DBMS管理,使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性(外模式/模式)和物理独立性(模式/内模式)。
1.4数据库系统组成
DBA(数据库管理员)的职责
- 决定数据库中的信息内容和结构
- 决定数据库的存储结构和存取策略
- 定义数据的安全要求和完整性约束条件
第二章 关系数据库
用二维表格表示实体集,用关键码表示实体间联系的数据模型称为关系模型
2.3关系的完整性
-
实体完整性
若属性A是基本关系R的主属性,则A不能取空值。
实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标识,一般用主键、唯一索引 unique关键字,及identity属性比如说我们的身份证号码,可以唯一标识一个人。
简单来说一个表中的唯一标识列不可为空。主关键字不能取空值或重复的值,如果是多个字段一起组成主键,则这多个字段均不能取空值。
-
参数(引用)完整性
现实世界的实体之间往往存在某种联系,在关系模型中实体与实体见的联系都是用关系来描述的,这样就存在着关系之间的引用。参数完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。
准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。 参照完整性维护表间数据的有效性、完整性,通常通过建立外键关联另一表的主键,还可以编写2表的触发器来维护参照完整性。
简单来说就是主外键的关系。例如:
这两个表之间存在着属性的引用,即“课程”表引用了“课程类别”表的主键“类型ID”。按照参照完整性规则,“课程”表中每行的“类型ID”属性只能取下面两类值:
1)空值。表示该课程还未确定类别。
2)非空值。此时取值必须和“课程类别”表中的“类型ID”值相同,表示这门课程归属该类别。
-
用户定义的完整性(可选)
比如唯一性、能否取空值等。
2.4关系代数
运算符 | 含义 | |
---|---|---|
集合运算符 | ∪ | 并 |
- | 差 | |
∩ | 交 | |
× | 笛卡尔积 | |
专门的关系运算符 | σ | 选择 |
Π | 投影 | |
∞ | 连接 | |
÷ | 除 |
(56条消息) SQL语句嵌套与EXISTS谓词_sevenhu的博客-优快云博客
常用关系代数表达式和sql语句
设教学数据库中有3个关系:
- 学生关系S(SNO, SNAME,AGE,SEX)
- 学习关系SC(SNO,CNO,GRADE)
- 课程关系C(CNO,CNAME,TEACHER)
- 检索学习课程号为C2的学生学号与成绩
SELECT DISTINCT SNO,GRADE FROM SC WHERE CNO='C2'
- 检索学习课程号为C2的学生学号与姓名
SELECT DISTINCT SC.SNO,SNAME FROM SC,S WHERE SC.SNO=S.SNO AND CNO='C2'
//第一种是万能方法,但是查询效率比第二个低
关系代数表达式的优化:
目的 :为了系统在执行时既省时间又能提高效率。
基本策略 :先做选择,运用投影去除多余属性等等。
优化算法 :语法树(尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)
应付考试算了。。。。
- 检索选修课程名为MATHS的学生学号与姓名
SELECT DISTINCT SNO,SNAME FROM S,SC,C WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND CNAME='MATHS'
- 检索选修课程号为C2或C4的学生学号
SELECT SNO FROM SC WHERE CNO='C2' OR CNO='C4'
- 检索至少选修课程号为C2和C4的学生学号
SELECT SNO FROM SC AS X,SC AS Y WHERE X.SNO=Y.SNO AND S.CNO='C2' AND Y.CNO='C4'
- 检索不学C2课的学生姓名与年龄
SELECT SNAME,AGE FROM S WHERE SNO NOT IN (SELECT SNO FROM SC WHERE CNO='C2')
-
检索学习全部课程的学生姓名
SELECT SNAME FROM S WHERE SNO IN (SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(*)=(SELECT COUNT(*) FROM C)) //from>where>group(含聚合)>having>order>select。 having是在分组后对数据进行过滤 where是在分组前对数据进行过滤 having后面可以使用聚合函数 where后面不可以使用聚合 //不存在一门课程不存在于学生的选修课中 SELECT SNAME FROM S WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.SNO=S.SNO AND C.CNO=SC.CNO))//exists只返回bool值,嵌套exists相当于两层for循环,执行内循环一次,返回给上一层结果
-
检索所学课程包含S3所学课程的学生学号(其他同学于S3相同的课程,全部包含)
select distinct Sno from SC X where not exists(select * from SC Y where Y.Sno='S3' and not exists (select * from SC Z where Z.Sno=X.Sno and Z.Cno=Y.Cno)) //查询学生,不存在这样的课程t,学生S3选修了t,而要查询的学生没有选修。
- 试述关系模型的完整性规则。
实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。
- 举个栗子:
- 选修(学号,课程号,成绩)
- 其中加粗了的学号和课程号都是主属性;
- 则“学号”和“课程号”两个属性都不能取空值。
- 在参照完整性中,什么情况下外码属性的值可以为空值?
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值);
或者等于S中某个元组的主码值。
- 举个栗子:
- 学生(学号,姓名,性别,专业号,年龄)
- 专业(专业号,专业名)
- 其中加粗了的学号和专业号都是主码;
- 则学生关系中每个元组的“专业号”属性只能取下面两种类值:
-
空值:表示尚未给该学生分配专业;
-
非空值:这时填入的该值必须是“专业”关系中某个“专业号”的值;
-
试述等值连接与自然连接的区别和联系
- 连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组
- 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉
- 关系代数的基本运算有哪些 ? 如何用这些基本运算来表示其他运算?
- 并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。

- ÷的理解:先将R的所有非相等属性与S的相等属性做笛卡尔积,减去R取不相等属性,即不相等属性为不包含所有的相等属性,再做减法,即为包含的
第三章 关系数据库标准语言SQL
- COUNT记录个数不忽略null
- 什么是基本表?什么是视图?两者的区别和联系是什么?
- 基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
- 试述视图的优点。
- 视图能够简化用户的操作;
- 视图使用户能以多种角度看待同一数据;
- 视图对重构数据库提供了一定程度的逻辑独立性;
- 视图能够对机密数据提供安全保护。
第四章 数据库的安全性
(56条消息) 【吐血整理】数据库的安全性_Henry_626的博客-优快云博客
-
什么是数据库的安全性?
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
-
数据库安全性和计算机系统的安全性有什么关系?
安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的 -
试述实现数据库安全性控制的常用方法和技术
- 用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
- 存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )。
- 视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
- 审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
- 数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
- 什么是数据库中的自主存取控制方法和强制存取控制方法?
- 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
- 强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
-
SQL 语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。
SQL 中的自主存取控制是通过GRANT语句和REVOKE语句来实现的。
如:
GRANT SELECT , INSERT ON Student TO 王平 WITH GRANT OPTION ;
就将Student 表的SELECT 和INSERT 权限授予了用户王平,后面的“WITH GRANT OPTION ”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。
REVOKE INSERT ON Student FROM 王平CASCADE ;
就将Student 表的INSERT 权限从用户王平处收回,选项CASCADE 表示,如果用户王平将Student 的INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。
-
理解并解释MAC 机制中主体、客体、敏感度标记的含义
主体是系统中的活动实体,既包括DBMS 所管理的实际用户,也包括代表用户的各进程。
客体是系统中的被动实体,是受主体操纵的,包括文件、基表、索引、视图等。对于主体和 客体,DBMS 为它们每个实例(值)指派一个敏感度标记(Label )。敏感度标记被分成若干级别,例如绝密(Top Secret )、机密(Secret )· 可信( Confidential )、公开(PubliC )等。主体的敏感度标记称为许可证级别(ClearanCe 玫vel ) ,客体的敏感度标记称为密级(Classification Level )。
-
什么是数据库的审计功能,为什么要提供审计功能?
审计功能是指DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中。
因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
第五章 数据库的完整性
-
什么是数据库的完整性?
数据库的完整性是指数据的正确性和相容性。
-
数据库的完整性概念与数据库的安全性概念有什么区别和联系?
数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出( Garbage In Garbage out )所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
-
什么是数据库的完整性约束条件?可分为哪几类?
-
完整性约束条件是指数据库中的数据应该满足的语义约束条件。
-
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
-
静态列级约束是对一个列的取值域的说明,包括以下几个方面:
( l )对数据类型的约束,包括数据的类型、长度、单位、精度等;
( 2 )对数据格式的约束;
( 3 )对取值范围或取值集合的约束;
( 4 )对空值的约束;
( 5 )其他约束。
-
静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
-
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
常见的静态关系约束有: ( l )实体完整性约束; ( 2 )参照完整性约束; ( 3 )函数依赖约束。
-
动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
( l )修改列定义时的约束;
( 2 )修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
-
动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
-
DBMS 的完整性控制机制应具有哪些功能?
DBMS 的完整性控制机制应具有三个方面的功能:
( l )定义功能:即提供定义完整性约束条件的机制;
( 2 )检查功能:即检查用户发出的操作请求是否违背了完整性约束条件;
( 3 )违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
-
RDBMS(关系数据库管理系统) 在实现参照完整性时需要考虑哪些方面?
RDBMs 在实现参照完整性时需要考虑以下几个方面:
( l )外码是否可以接受空值。
( 2 )删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种: l )拒绝 ; 2 )级联删除 ; 3 )设置为空值。
( 3 )在参照关系中插入元组时的问题,这时系统可能采取的作法有: l )受限插入; 2 )递归插入。
( 4 )修改关系中主码的问题。一般是不能用 UPDATE 语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。
-
关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?
对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。
-
触发器:用户定义在关系表上的一类由事件驱动的特殊过程
第六章 关系数据理论
6.关系数据理论
闭包:将所求属性或属性组合添加到集合里去,一一对照依赖关系,依赖左边的属性全出现在集合里时,添加右属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfXMY4bC-1669650533142)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221105110531792.png)]
(48条消息) 关系数据库理论之最小函数依赖集_mgsky1的博客-优快云博客_最小函数依赖集
最小依赖集步骤(最小一依赖集不唯一)
- 依赖函数分解,使依赖集右边属性单一
- 一一去除依赖关系,例如X->A,求剩下的依赖集中X的闭包,若包含A,则删除,否则保留
- 将依赖集左边不为单属性的去除一个,记步骤二后的依赖集为F1,步骤三之后的为F2,例如AB->Y,去除A,若F1和F2关于B的闭包相等,则删除,否则保留
-
理解并给出下列术语的定义
函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、主码、外码、全码(All 一key )、1 NF 、ZNF 、3NF 、BcNF 、多值依赖、4NF 。
- 函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。(X确定Y)
- 完全、部分函数依赖: 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ !
Y, 则称Y对X完全函数依赖,记作X
Y。
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖00,记作XY。
- 传递依赖:在R(U)中,如果X→Y,(Y
X) ,Y!→X Y→Z, 则称Z对X传递函数依赖。记为:X
Z
- 候选码、主码:设K为R<U,F>中的属性或属性组合。若K
U, 则K称为R的侯选码(Candidate Key)。若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
- 外码:关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码
- 全码(All 一key ):整个属性组是码,称为全码(All-key)。
- 1NF:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
- 2NF:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
- 3NF:关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z
Y), 使得X→Y,Y→Z成立, Y !→ X,则称R<U,F> ∈ 3NF。
- BCNF:关系模式R<U,F>∈1NF,若X →Y且Y
X时X必含有码,则R<U,F> ∈BCNF。
- 4NF:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y不是X的子集,Z=U-X-Y不为空),X都含有码,则称R<U,F>∈4NF。
第七章 数据库设计
7.3概念结构设计
(52条消息) E-R模型—概念结构设计_鱼sama的博客-优快云博客_e-r模型
(52条消息) 数据库中几个基本概念 主码 外码_李意文的博客-优快云博客_外码数据库
(52条消息) ER图(实体关系图)怎么画?_亿图图示的博客-优快云博客_er图
(52条消息) 案例讲解如何将ER图转化为关系模型_亿图图示的博客-优快云博客_er图转化为关系模型
-
试述数据库设计过程
( l )需求分析;
( 2 )概念结构设计;
( 3 )逻辑结构设计;
( 4 )物理结构设计;
( 5 )数据库实施;
( 6 )数据库运行和维护。
这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、运行和维护。设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。
-
试述数据库设计过程各个阶段上的设计描述
( l )需求分析:准确了解与分析用户需求(包括数据与处理)。
( 2 )概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。
( 3 )逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。
( 4 )数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
( 5 )数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
( 6 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。
-
试述数据库设计过程中结构设计部分形成的数据库模式
数据库结构设计的不同阶段形成数据库的各级模式,即:
( l )在概念设计阶段形成独立于机器特点,独立于各个 DBMS 产品的概念模式,在本篇中就是 E 一 R 图;
( 2 )在逻辑设计阶段将 E 一 R 图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后在基本表的基础上再建立必要的视图 ,形成数据的外模式;
( 3 )在物理设计阶段,根据 DBMS 特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
-
什么是数据库的概念结构?试述其特点和设计策略。
概念结构是信息世界的结构,即概念模型,其主要特点是:
( l )能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
( 2 )易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键;
( 3 )易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
( 4 )易于向关系、网状、层次等各种数据模型转换。概念结构的设计策略通常有四种: l )自顶向下,即首先定义全局概念结构的框架,然后逐步细化; 2 )自底向上,即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构; 3 )逐步扩张,首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构; 4 )混合策略,即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
-
什么是数据库的逻辑结构设计?试述其设计步骤。
数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一 R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。设计步骤为 :
( l )将概念结构转换为一般的关系、网状、层次模型;
( 2 )将转换来的关系、网状、层次模型向特定 DBMS 支持下的数据模型转换;
( 3 )对数据模型进行优化。
第十章 数据库恢复技术
恢复原理:利用存储在系统其他地方的冗余数据来重建数据库汇总已被破坏或不正确的数据
-
试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?
事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务具有四个特性:
- 原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
- 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持续性:持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
这个四个特性也简称为ACID特性。恢复技术能保证事务的原子性、一致性和持续性。
-
登记日志文件时为什么必须先写日志文件,后写数据库?
把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
10.3故障种类与故障恢复
1.事务内部的故障
事务内部故障可分为预期的和非预期的,其中大部分的故障都是非预期的。预期的事务内部故障是指可以通过事务程序本身发现的事务内部故障; 非预期的事务内部故障是不能由事务程序处理的,如运算溢出故障、并发事务死锁故障、违反了某些完整性限制而导致的故障等。
在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销。
2.系统故障(软故障)
系统故障也称为软故障,是指数据库在运行过程中,由于硬件故障、数据库软件及操作系统的漏洞、突然停电灯情况,导致系统停止运转,所有正在运行的事务以非正常方式终止,需要系统重新启动的一类故障。这类事务不破坏数据库,但是影响正在运行的所有事务。
待计算机重新启动之后,对于未完成的事务可能写入数据库的内容,回滚所有未完成的事务写的结果;对于已完成的事务可能部分或全部留在缓冲区的结果,需要重做所有已提交的事务(即撤销所有未提交的事务,重做所有已提交的事务)。
3.介质故障(硬故障)
事务内部故障可分为预期的和非预期的,其中大部分的故障都是非预期的。预期的事务内部故障是指可以通过事务程序本身发现的事务内部故障; 非预期的事务内部故障是不能由事务程序处理的,如运算溢出故障、并发事务死锁故障、违反了某些完整性限制而导致的故障等。
在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销。
4.计算机病毒
计算机病毒故障是一种恶意的计算机程序,它可以像病毒一样繁殖和传播,在对计算机系统造成破坏的同时也可能对数据库系统造成破坏(破坏方式以数据库文件为主) 。
使用防火墙软件防止病毒侵入,对于已感染病毒的数据库文件,使用杀毒软件进行查杀,如果杀毒软件杀毒失败,此时只能用数据库备份文件,以软件容错的方式恢复数据库文件。
5.恢复的实现技术
建立冗余数据最常用的技术是数据转储和登记日志文件
1.数据转储
所谓转储即数据库管理员定期地将整个数据复制到磁带、磁盘或其他存储介质上保存起来的过程。这些备用的数据称为后备副本或后援副本。
2.登记日志文件
日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样。概括起来日志文件只要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。
(1)以记录为单位的日志文件,需要登记的内容包括:
各个事务的开始
各个事务的结束
各个事务的所有更新操作
每个日志记录的内容主要包括:
事务标识(标明是哪个事务)
操作的类型(插入、删除或修改)
操作对象(记录内部标识)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言,此项为控制)
(2)以数据块为单位的日志文件
日志记录的内容包括事务标识和被更新的数据块。由于将更新前的整个块和更新后的整个块都放入日志文件中,操作类型和操作对象等信息就不必放入日志记录中了。
日志文件的作用:
事务故障恢复和系统故障回复必须使用日志文件
在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
在静态转储方式中也可以建立日志文件,当数据库毁坏后重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。
登记日志文件的原则:
登记的次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库(因为如果先写数据库,再写日志文件的过程中发生错误就无法恢复数据库;如果先写日志文件,即使写入库中发生错误那么通过日志文件还是可以恢复。)
3.数据库镜像
指系统将整个数据库或者其中的关键数据复制到冷一个磁盘上,每当主数据库更新的时,数据库管理系统自动把更新后的数据复制过去,有数据库系统自动保证镜像数据与主数据库的一致性。这样一旦介质故障,可由镜像磁盘继续提供使用,同事数据库管理系统自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。在没有发生故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排他锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
第十一章 并发控制
并发控制概述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTTwOAYK-1669650533142)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221114200111607.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqPlR7ju-1669650533142)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221114200137512.png)]
11.2封锁
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usC8wfpl-1669650533143)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221109233747774.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GEANyuA-1669650533143)(C:\Users\sky\AppData\Roaming\Typora\typora-user-images\image-20221109233916551.png)]
11.4活锁和死锁
事务使用封锁机制后,就会产生活锁死锁,和不串行化调度问题。
-
当多个事务请求封锁同一数据时,某一事务总是处于等待状态无法获得所需要的封锁,这种状态叫活锁
解决办法:采用先来先服务策略。
-
事务T1和T2都需要锁定被对方已经锁定的1数据对象,提出申请后互相等待对方释放锁,两个事务永远无法结束,只能继续等待,这就产生了死锁
解决办法:1.预防死锁。2检验并解除死锁。预防死锁包括一次封锁和顺序封锁两种方法。检测死锁使用超市法和等待图法。
- 什么是封锁?基本的封锁类型有几种?试述它们的含义
- 封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术。
- 基本的封锁类型有两种: 排它锁(Exclusive Locks,简称X锁) 和共享锁(Share Locks,简称S锁)。
- 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
- 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
- 什么是活锁?试述活锁的产生原因和解决方法。
- 事务T1封锁了数据R;事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……。T2有可能永远等待,这就是活锁的情形。
- 活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
- 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
- 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
- 数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。
- DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
- 超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。
- DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。
的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
- 什么是活锁?试述活锁的产生原因和解决方法。
- 事务T1封锁了数据R;事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……。T2有可能永远等待,这就是活锁的情形。
- 活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
- 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
- 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
- 数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。
- DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
- 超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。
- DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。