第一章
5.试述数据库系统的特点。
- 数据结构化
- 数据的共享性高,冗余度低且易扩充
- 数据独立性高
- 数据由数据库管理系统统一管理和控制
9.试述数据模型的概念、数据模型的作用和数据模型的三个要素。
数据模型的概念:数据模型是对现实世界数据特征的抽象,现实世界的模拟。数据模型是严格定义的一组概念的集合,精确地描述了系统的静态特性、动态特性和完整性约束条件
数据模型的作用:能比较真实地模拟现实世界,容易为人所理解,便于在计算机上实现。数据模型是数据库系统的核心和基础。
数据模型的三个要素:数据结构、数据操作 、数据的完整性约束条件
15.试述数据库系统的三级模式结构,并说明这种结构的优点是什么。
数据库的三级模式结构分为模式,外模式,内模式。
模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
外模式也称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外
内模式也称存储模式,是数据物理结构和存放方式的描述,是数据在数据库内部的组织方式。
优点
-
保证了数据库外模式的稳定性
除非应用需求本身发生变化,否则应用程序一般不需要修改
-
从程序为中心发展为以数据为中心
具有了数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去
-
数据的存取由数据库管理系统管理
- 简化了应用程序的编制
- 大大减少了应用程序的维护和修改
17.什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?
数据与程序的逻辑独立性:当模式改变时(例如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
数据与程序的物理独立性:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性。数据库管理系统在三级模式之间提供的两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
数据库管理系统在三级模式之间提供的两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
第二章
4.举例说明关系模式和关系的区别。
关系模式是对关系的描述,是静态的、稳定的。
关系是关系模式在某一时刻的状态或内容,是动态的、随时间不断变化的。
关系模式是型,关系是值,关系模式是对关系的描述。
关系模型的三种完整性约束
关系模型中有三类完整性约束:实体完整性(entity integrity)、参照完整性(referential integrity)和用户定义的完整性( user-defined integrity)。
- 实体完整性规则:若属性 (指一个或一组属性) A是基本关系R的主属性,则A不能取空值(null value)。
- 参照完整性规则:若属性(或属性组) F是基本关系 R的外码, 它与基本关系S的主码K,相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
- 用户定义的完整性:针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。例如某个属性必须取唯一值、某个非主属性不能取空值等。
第三章
6.什么是基本表?什么是视图?两者的区别和联系是什么?
基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。
-
存在不同:
基本表:基本表是本身独立存在的表;
视图:视图本身不存在独立存储在数据库中,是一个虚表。
-
存储内容不同
基本表:基本表存储的内容是实际的数据。
视图:视图存储的内容只有存储定义,不存放实际数据。
-
操作不同
基本表:操作者可以对基本表进行增删改查四种操作。
视图:操作者只可以对视图进行查操作,不能进行增删改操作。
8.哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。
允许对行列子集视图进行更新
不允许更新:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新
- 若视图是由两个以上基本表导出的,则此视图不允许更新。
- 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
- 若视图的字段来自集函数,则此视图不允许更新。
- 若视图定义中含有GROUP BY子句,则此视图不允许更新。
- 若视图定义中含有DISTINCT短语,则此视图不允许更新。
- 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
连接操作的实现方法
-
嵌套循环算法
内外双层循环
-
排序合并算法
对两个表排序(A,B),按连接属性扫描。如A为student,B为sc,按连接属性sno扫描,
1、取student中的第一个sno,依次扫描sc表中具有相同sno元组
2、当sc中的sno和student中选取的sno不相同,则student中sno换下一元组 -
索引连接算法
1.在sc上建立属性sno的索引
2.对student中的每一个元组,由sno值通过sc的索引值查找相应的sc元组。
3.把这些sc元组和student元组连接起来重复2~3直到student表中的元组处理完为止
-
哈希连接算法
1.把连接属性作为hash码,用同一个hash函数把student表和sc表中的元组散列到hash表中
2.划分阶段:把包含较少元组的表进行一遍处理;把它的元组按hash函数分散到hash表的桶中
3.试探阶段/连接阶段:a、把另一个表进行一遍处理;b、把sc表的元组也按同一个hash函数进行散列;c、把sc元组与桶中来自于student表并与之相匹配的元组连接起来。
第四章
5.什么是数据库中的自主存取控制方法和强制存取控制方法?
自主存取控制:用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将"授权”的权限授予别人。
强制存取控制:是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
第五章
2.数据库的完整性概念与数据库的安全性概念有什么区别和联系?
区别:
-
内容不同
数据库完整性是指数据的正确性和相容性。
数据库安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。
-
对象不同
数据库安全性的防范对象是非法的操作和未授权的用户。
数据库完整性的防范对象是不符合语义的数据。
联系:
两者都是对数据库中的数据进行控制,各自所实现的功能目标不同。
第七章
4.数据字典的内容和作用是什么?
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程几部分。
数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
5.什么是数据库的概念结构?试述其特点和设计策略。
概念结构是独立于任何一种数据模型的信息结构
概念模型的主要特点是:
- 能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一一个 真实模型。
- 易于理解,可以用它和不熟悉计算机的用户交换意见。用户的积极参与是数据库设计成功的关键。
- 易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充。
- 易于向关系、网状、层次等各种数据模型转换。
概念结构的设计策略通常有四种:
-
自顶向下
即首先定义全局概念结构的框架,然后逐步细化
-
自底向上
即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构
-
逐步扩张
首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
-
混合策略
即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
第十章
1.试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务的4个特性:原子性(Atomicity)、一致性 (Consistency)、 隔离性(Isolation)和持续性( Durability)。这4个特性简称为ACID特性(ACID properties)。
-
原子性
事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
-
一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一一个一 致性状态。
-
隔离性
一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
-
持续性
持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
恢复技术能保证事务的原子性、一致性和持续性。
3.登记日志文件时为什么必须先写日志文件,后写数据库?
如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。这就是“先写日志文件”的原则。
10.什么是数据库镜像?它有什么用途?
数据库镜像:根据数据库管理员的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,数据库管理系统自动把更新后的数据复制过去,由数据库管理系统自动保证镜像数据与主数据库的一致性。
用途:一旦出现介质故障,可由镜像磁盘继续提供使用,同时数据库管理系统自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排他锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
故障的种类
-
事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现,有的是非预期的,不能由事务程序处理。事务内部更多的故障是非预期的,是不能由应用程序处理的。事务故障意味着事务没有达到预期的终点,因此,数据库可能处于不正确状态。
-
系统故障
系统故障常称为软故障(softcrash),是指造成系统停止运转的任何事件,使得系统要重新启动。
-
介质故障
介质故障称为硬故障(hardcrash)。硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但破坏性最大。
-
计算机病毒
计算机病毒是一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序。这种程序与其他程序不同,它像微生物学所称的病毒一样 可以繁殖和传播,并造成对计算机系统包括数据库的危害。
第十一章
2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?
并发操作带来的数据不一致性包括丢失修改、不可重复读和读“脏”数据。
- 丢失修改:事务t1和事务t2同时读取并修改同一数据,t1提交的结果破坏了t2提交的结果,导致t2的结果丢失。
- 不可重复读:事务t1读取数据r后,事务t2对数据r进行更新操作,当事务t1再次读取该数据时已与之前的结果不一致。这就是数据的不可重复读。
- 读“脏数据”:事务t1修改某一数据,并将其写回磁盘,事务t2读取数据r,然后因为某种原因,t1被撤消,此时t2读取到的数据就与数据库中的数据不一致。
避免不一致性的方法是并发控制。并发控制的主要技术有封锁 (locking)、 时间戳(timestamp)、乐观控制法(optimistic scheduler)和多版本并发控制( multi-version concurrency control, MVCC)等。
3.什么是封锁?基本的封锁类型有几种?试述它们的含义。
封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务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做任何修改。
5.什么是活锁?试述活锁的产生原因和解决方法。
活锁:当多个事务请求封锁同一数据对象时,部分事务有可能永远等待。
如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待; T3 也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待;然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求…T2有可能永远等待,这就是活锁的情形。
避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
6.什么是死锁?请给出预防死锁的若干方法。
死锁:在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已被其他事务封锁的数据对象加锁,从而出现死等待。
如果事务T1封锁了数据R1, T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁;接着T2又申请封锁R1,因T1已封锁了R1, T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
预防死锁:
-
一次封锁法
一次封锁法要求每个事务必须次将所有要使用的数据全部加锁,否则就不能继续执行。
-
顺序封锁法
顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁。