数据库及其应用题库
㈠ 求数据库应用题
数据库语言的目标
要说清这个目标,先要理解数据库是做什么的。
数据库这个软件,名字中有个“库”字,会让人觉得它主要是为了存储的。其实不然,数据库实现的重要功能有两条:计算、事务!也就是我们常说的 OLAP 和 OLTP,数据库的存储都是为这两件事服务的,单纯的存储并不是数据库的目标。
我们知道,sql 是目前数据库的主流语言。那么,用 SQL 做这两件事是不是很方便呢?
事务类功能主要解决数据在写入和读出时要保持的一致性,实现这件事的难度并不小,但对于应用程序的接口却非常简单,用于操纵数据库读写的代码也很简单。如果假定目前关系数据库的逻辑存储模式是合理的(也就是用数据表和记录来存储数据,其合理性与否是另一个复杂问题,不在这里展开了),那么 SQL 在描述事务类功能时没什么大问题,因为并不需要描述多复杂的动作,复杂性都在数据库内部解决了。
但计算类功能却不一样了。
这里说的计算是个更广泛的概念,并不只是简单的加加减减,查找、关联都可以看成是某种计算。
什么样的计算体系才算好呢?
还是两条:写着简单、跑得快。
写着简单,很好理解,就是让程序员很快能写出来代码来,这样单位时间内可以完成更多的工作;跑得快就更容易理解,我们当然希望更短时间内获得计算结果。
其实 SQL 中的 Q 就是查询的意思,发明它的初衷主要是为了做查询(也就是计算),这才是 SQL 的主要目标。然而,SQL 在描述计算任务时,却很难说是很胜任的。
SQL为什么不行
先看写着简单的问题。
SQL 写出来很象英语,有些查询可以当英语来读和写(网上多得很,就不举例了),这应当算是满足写着简单这一条了吧。
且慢!我们在教科书上看到的 SQL 经常只有两三行,这些 SQL 确实算是写着简单的,但如果我们尝试一些稍复杂化的问题呢?
这是一个其实还不算很复杂的例子:计算一支股票最长连续上涨了多少天?用 SQL 写出来是这样的:
- selectmax(consecutive_day)from(selectcount(*) (consecutive_dayfrom(selectsum(rise_mark) over(orderbytrade_date) days_no_gainfrom(selecttrade_date,case when closing_price>lag(closing_price) over(order by trade_date)then 0 else 1 END rise_markfrom stock_price ) )group by days\_no\_gain)
- SELECTTOP 10x FROMT ORDERBYx DESC
- stock_price.sort(trade_date).group@o(closing_price
- T.groups(;top(-10,x))
这个语句的工作原理就不解释了,反正有点绕,同学们可以自己尝试一下。
这是润乾公司的招聘考题,通过率不足 20%;因为太难,后来被改成另一种方式:把 SQL 语句写出来让应聘者解释它在算什么,通过率依然不高。
这说明什么?说明情况稍有复杂,SQL 就变得即难懂又难写!
再看跑得快的问题,还是一个经常拿出来的简单例子:1 亿条数据中取前 10 名。这个任务用 SQL 写出来并不复杂:
但是,这个语句对应的执行逻辑是先对所有数据进行大排序,然后再取出前 10 个,后面的不要了。大家知道,排序是一个很慢的动作,会多次遍历数据,如果数据量大到内存装不下,那还需要外存做缓存,性能还会进一步急剧下降。如果严格按这句 SQL 体现的逻辑去执行,这个运算无论如何是跑不快的。然而,很多程序员都知道这个运算并不需要大排序,也用不着外存缓存,一次遍历用一点点内存就可以完成,也就是存在更高性能的算法。可惜的是,用 SQL 却写不出这样的算法,只能寄希望于数据库的优化器足够聪明,能把这句 SQL 转换成高性能算法执行,但情况复杂时数据库的优化器也未必靠谱。
看样子,SQL 在这两方面做得都不够好。这两个并不复杂的问题都是这样,现实中数千行的 SQL 代码中,这种难写且跑不快的情况比比皆是。
为什么 SQL 不行呢?
要回答这个问题,我们要分析一下用程序代码实现计算到底是在干什么。
本质上讲,编写程序的过程,就是把解决问题的思路翻译成计算机可执行的精确化形式语言的过程。举例来说,就象小学生解应用题,分析问题想出解法之后,还要列出四则运算表达式。用程序计算也是一样,不仅要想出解决问题的方法,还要把解法翻译成计算机能理解执行的动作才算完成。
用于描述计算方法的形式语言,其核心在于所采用的代数体系。所谓代数体系,简单说就是一些数据类型和其上的运算规则,比如小学学到的算术,就是整数和加减乘除运算。有了这套东西,我们就能把想做的运算用这个代数体系约定的符号写出来,也就是代码,然后计算机就可以执行了。
如果这个代数体系设计时考虑不周到,提供的数据类型和运算不方便,那就会导致描述算法非常困难。这时候会发生一个怪现象:翻译解法到代码的难度远远超过解决问题本身。
举个例子,我们从小学习用阿拉伯数字做日常计算,做加减乘除都很方便,所有人都天经地义认为数值运算就该是这样的。其实未必!估计很多人都知道还有一种叫做罗马数字的东西,你知道用罗马数字该怎么做加减乘除吗?古罗马人又是如何上街买菜的?
代码难写很大程度是代数的问题。
再看跑不快的原因。
软件没办法改变硬件的性能,CPU 和硬盘该多快就是多快。不过,我们可以设计出低复杂度的算法,也就是计算量更小的算法,这样计算机执行的动作变少,自然也就会快了。但是,光想出算法还不够,还要把这个算法用某种形式语言写得出来才行,否则计算机不会执行。而且,写起来还要比较简单,都要写很长很麻烦,也没有人会去用。所以呢,对于程序来讲,跑得快和写着简单其实是同一个问题,背后还是这个形式语言采用的代数的问题。如果这个代数不好,就会导致高性能算法很难实现甚至实现不了,也就没办法跑得快了。就象上面说的,用 SQL 写不出我们期望的小内存单次遍历算法,能不能跑得快就只能寄希望于优化器。
我们再做个类比:
上过小学的同学大概都知道高斯计算 1+2+3+…+100 的小故事。普通人就是一步步地硬加 100 次,高斯小朋友很聪明,发现 1+100=101、2+99=101、…、50+51=101,结果是 50 乘 101,很快算完回家午饭了。
听过这个故事,我们都会感慨高斯很聪明,能想到这么巧妙的办法,即简单又迅速。这没有错,但是,大家容易忽略一点:在高斯的时代,人类的算术体系(也是一个代数)中已经有了乘法!象前面所说,我们从小学习四则运算,会觉得乘法是理所当然的,然而并不是!乘法是后于加法被发明出来的。如果高斯的年代还没有乘法,即使有聪明的高斯,也没办法快速解决这个问题。
目前主流数据库是关系数据库,之所以这么叫,是因为它的数学基础被称为关系代数,SQL 也就是关系代数理论上发展出来的形式语言。
现在我们能回答,为什么 SQL 在期望的两个方面做得不够好?问题出在关系代数上,关系代数就像一个只有加法还没发明乘法的算术体系,很多事做不好是必然的。
关系代数已经发明五十年了,五十年前的应用需求以及硬件环境,和今天比的差异是很巨大了,继续延用五十年前的理论来解决今天的问题,听着就感觉太陈旧了?然而现实就是这样,由于存量用户太多,而且也还没有成熟的新技术出现,基于关系代数的 SQL,今天仍然是最重要的数据库语言。虽然这几十年来也有一些改进完善,但根子并没有变,面对当代的复杂需求和硬件环境,SQL 不胜任也是情理之中的事。
而且,不幸的是,这个问题是理论上的,在工程上无论如何优化也无济于事,只能有限改善,不能根除。不过,绝大部分的数据库开发者并不会想到这一层,或者说为了照顾存量用户的兼容性,也没打算想到这一层。于是,主流数据库界一直在这个圈圈里打转转。
SPL为什么能行
那么该怎样让计算写着更简单、跑得更快呢?
发明新的代数!有“乘法”的代数。在其基础上再设计新的语言。
这就是 SPL 的由来。它的理论基础不再是关系代数,称为离散数据集。基于这个新代数设计的形式语言,起名为SPL(Structured Process Language)。
SPL 针对 SQL 的不足(更确切地说法是,离散数据集针对关系代数的各种缺陷)进行了革新。SPL 重新定义了并扩展许多结构化数据中的运算,增加了离散性、强化了有序计算、实现了彻底的集合化、支持对象引用、提倡分步运算。
限于篇幅,这里不能介绍 SPL(离散数据集)的全貌。我们在这里列举 SPL(离散数据集)针对 SQL(关系代数)的部分差异化改进:
游离记录
离散数据集中的记录是一种基本数据类型,它可以不依赖于数据表而独立存在。数据表是记录构成的集合,而构成某个数据表的记录还可以用于构成其它数据表。比如过滤运算就是用原数据表中满足条件的记录构成新数据表,这样,无论空间占用还是运算性能都更有优势。
关系代数没有可运算的数据类型来表示记录,单记录实际上是只有一行的数据表,不同数据表中的记录也不能共享。比如,过滤运算时会复制出新记录来构成新数据表,空间和时间成本都变大。
特别地,因为有游离记录,离散数据集允许记录的字段取值是某个记录,这样可以更方便地实现外键连接。
有序性
关系代数是基于无序集合设计的,集合成员没有序号的概念,也没有提供定位计算以及相邻引用的机制。SQL 实践时在工程上做了一些局部完善,使得现代 SQL 能方便地进行一部分有序运算。
离散数据集中的集合是有序的,集合成员都有序号的概念,可以用序号访问成员,并定义了定位运算以返回成员在集合中的序号。离散数据集提供了符号以在集合运算中实现相邻引用,并支持针对集合中某个序号位置进行计算。
有序运算很常见,却一直是 SQL 的困难问题,即使在有了窗口函数后仍然很繁琐。SPL 则大大改善了这个局面,前面那个股票上涨的例子就能说明问题。
离散性与集合化
关系代数中定义了丰富的集合运算,即能将集合作为整体参加运算,比如聚合、分组等。这是 SQL 比 Java 等高级语言更为方便的地方。
但关系代数的离散性非常差,没有游离记录。而 Java 等高级语言在这方面则没有问题。
离散数据集则相当于将离散性和集合化结合起来了,既有集合数据类型及相关的运算,也有集合成员游离在集合之外单独运算或再组成其它集合。可以说 SPL 集中了 SQL 和 Java 两者的优势。
有序运算是典型的离散性与集合化的结合场景。次序的概念只有在集合中才有意义,单个成员无所谓次序,这里体现了集合化;而有序计算又需要针对某个成员及其相邻成员进行计算,需要离散性。
在离散性的支持下才能获得更彻底的集合化,才能解决诸如有序计算类型的问题。
离散数据集是即有离散性又有集合化的代数体系,关系代数只有集合化。
分组理解
分组运算的本意是将一个大集合按某种规则拆成若干个子集合,关系代数中没有数据类型能够表示集合的集合,于是强迫在分组后做聚合运算。
离散数据集中允许集合的集合,可以表示合理的分组运算结果,分组和分组后的聚合被拆分成相互独立的两步运算,这样可以针对分组子集再进行更复杂的运算。
关系代数中只有一种等值分组,即按分组键值划分集合,等值分组是个完全划分。
离散数据集认为任何拆分大集合的方法都是分组运算,除了常规的等值分组外,还提供了与有序性结合的有序分组,以及可能得到不完全划分结果的对位分组。
聚合理解
关系代数中没有显式的集合数据类型,聚合计算的结果都是单值,分组后的聚合运算也是这样,只有 SUM、COUNT、MAX、MIN 等几种。特别地,关系代数无法把 TOPN 运算看成是聚合,针对全集的 TOPN 只能在输出结果集时排序后取前 N 条,而针对分组子集则很难做到 TOPN,需要转变思路拼出序号才能完成。
离散数据集提倡普遍集合,聚合运算的结果不一定是单值,仍然可能是个集合。在离散数据集中,TOPN 运算和 SUM、COUNT 这些是地位等同的,即可以针对全集也可以针对分组子集。
SPL 把 TOPN 理解成聚合运算后,在工程实现时还可以避免全量数据的排序,从而获得高性能。而 SQL 的 TOPN 总是伴随 ORDER BY 动作,理论上需要大排序才能实现,需要寄希望于数据库在工程实现时做优化。
有序支持的高性能
离散数据集特别强调有序集合,利用有序的特征可以实施很多高性能算法。这是基于无序集合的关系代数无能为力的,只能寄希望于工程上的优化。
下面是部分利用有序特征后可以实施的低复杂度运算:
1) 数据表对主键有序,相当于天然有一个索引。对键字段的过滤经常可以快速定位,以减少外存遍历量。随机按键值取数时也可以用二分法定位,在同时针对多个键值取数时还能重复利用索引信息。
2) 通常的分组运算是用 HASH 算法实现的,如果我们确定地知道数据对分组键值有序,则可以只做相邻对比,避免计算 HASH 值,也不会有 HASH 冲突的问题,而且非常容易并行。
3) 数据表对键有序,两个大表之间对位连接可以执行更高性能的归并算法,只要对数据遍历一次,不必缓存,对内存占用很小;而传统的 HASH 值分堆方法不仅比较复杂度高,需要较大内存并做外部缓存,还可能因 HASH 函数不当而造成二次 HASH 再缓存。
4) 大表作为外键表的连接。事实表小时,可以利用外键表有序,快速从中取出关联键值对应的数据实现连接,不需要做 HASH 分堆动作。事实表也很大时,可以将外键表用分位点分成多个逻辑段,再将事实表按逻辑段进行分堆,这样只需要对一个表做分堆,而且分堆过程中不会出现 HASH 分堆时的可能出现的二次分堆,计算复杂度能大幅下降。
其中 3 和 4 利用了离散数据集对连接运算的改造,如果仍然延用关系代数的定义(可能产生多对多),则很难实现这种低复杂的算法。
除了理论上的差异, SPL 还有许多工程层面的优势,比如更易于编写并行代码、大内存预关联提高外键连接性能等、特有的列存机制以支持随意分段并行等。
再把前面的问题用 SPL 重写一遍有个直接感受。
一支股票最长连续上涨多少天:
计算思路和前面的 SQL 相同,但因为引入了有序性后,表达起来容易多了,不再绕了。
1 亿条数据中取前 10 名:
SPL 有更丰富的集合数据类型,容易描述单次遍历上实施简单聚合的高效算法,不涉及大排序动作。
这里还有更多 SPL 代码以体现其思路及大数据算法:
重磅!开源SPL交流群成立了
简单好用的SPL开源啦!
为了给感兴趣的小伙伴们提供一个相互交流的平台,
特地开通了交流群(群完全免费,不广告不卖课)
需要进群的朋友,可长按扫描下方二维码
㈡ 跪求!紧急!数据库原理及应用的试题
一:
(1)select 书名,定价 from 图书 where 定价 = (select max(定价) from 图书)
(2)查询存储有书名为数据库系统基础的图书管的管名.
二:
(1)select S#,SNAME from S where AGE>22
(2)select CNAME,TEACHER from C where c# in ( select c# from SC where S# = 10001)
(3)select SNAME from S where sex='女' and s# in (select S# from SC where C# in (select C# fron C where teacher = '王老师'))
不能实现的话,留言
㈢ 数据库原理及应用 判断题
1 对 2 错(多表联合查询) 3 错 (包含关系,不是真包含)4 对 5 对 6 错(不是越多越好) 7 错(是虚拟表) 8 错(Count(*) 返回表中所有记录的总和,包含有可能返回式真的) 9 错 (可以取空)10 错
㈣ 数据库原理及应用基础的常见类型题
1.B 2.C 3.B 4.C 5.D 6.C 7.C 8.D 9.C 10.A
11.A 12.A 13.A - 不知道14。乙evogue2006 - 10 - 24 11点47分01秒15?16.A 17.B 18.A 19.D 20.C
试述事务的概念和事务的四个特性。
A:
事务是一个用户定义的数据库操作序列,这些操作要么全部做或不做的整体,是一个不可分割的工作单元。
事务有四个特点:原子性(原子性),一致性(一致性),隔离(隔离)和持久性(Durability)。这四个特点也被称为ACID属性。
原子性:事务数据库的逻辑工作单元,该交易包括所有的操作,无论是做还是不做。
一致性:事务执行的结果必须更改数据库从一个一致状态转换到另一个一致的状态。
隔离:一个事务的执行不能被其他事务的干扰。一个事务内的操作和使用其他并发事务的数据分离出来,并发执行的个别交易不能互相干扰。
持续性:持续性的,也被称为永久(持久性),指的到交易提交其数据存储在数据库中的变化应该是永久性的。接下来的操作或故障不应该有任何影响其执行结果。
2。为什么事务非正常时间的推移,会影响数据库中数据的正确性,举了一个例子。
A:
事务的执行结果必须更改数据库从一个一致状态转换到另一个一致状态。如果出现故障的数据库系统的操作,一些尚未完成的交易被迫中断,这些未完成的交易的一部分已被写入到物理数据库对数据库所做的更改,然后在数据库中不正确的状态,或者是不一致的状态。
如一个工厂的库存管理系统,它是必要的量Q的某些部分从仓库1仓库2个存储。
你可以定义一个事务T,T包括两个操作; Q1 = Q1-Q,Q2 = Q2 + Q. T改变的终??止,只有当第一个操作,数据库是不一致Q库存没有理由。
3。数据库中为什么要有恢复子系统?它的功能是什么?
A:
是不可避免的,因为计算机系统的硬件故障,软件错误,操作错误和恶意破坏所造成的这些故障从正在运行的事务中发生非正常中断,影响数据库中的数据正确性,而破坏了数据库中,因此,在数据库中的数据的全部或部分损失,因此必须有一个恢复子系统。功能
恢复子系统:数据库从错误状态恢复到一个已知的良好状态(也被称为一致的状态或完整状态)。
4。在数据库中可能出现的故障运行几类?什么故障影响正常执行的交易吗?什么故障破坏数据库中的数据?
A:数据库系统的各种可能发生的故障大致可分为如下几类:
(1)内部交易失败;
(2)系统故障; />(3)介质故障;
(4)计算机病毒。的
交易失败,系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏的数据
库。
5。根据回收技术?
A:
数据转储和登录日志文件是数据库恢复的基本技术。
当一个故障在系统运行过程中,转储数据库的日志文件,你可以将数据库恢复到一致状态,在发生故障之前的备份副本。
6。数据库的转储的意义是什么?各种数据转储方法的比较。
答案:
数据转储是基本的技术,在恢复的数据库。所谓的转储数据库DBA定期复制到磁带或其他磁盘保存。可以重新加载数据库破坏的数据库的备份副本恢复时的状态转储。
静态转储:转储系统操作运行的事务。静态转储,但必须等待用户交易结束之前运行。同样,新的事务必须等待执行转储结束。显然,这将减少数据库的可用性。
动态转储:转储期间允许数据库访问或。动态的转储可以克服静态转储的缺点,它并不需要等待正在运行的用户交易的结束,也不会影响新事务的操作。然而,备份的数据副本结束时的转储和不能保证正确和有效的。 ,因为转储运行在交易过程中可能会一些数据,备份的数据副本是不符合版本的数据库。
为此,我们必须活动期间注册使用mp transaction数据库,以创建一个日志文件(日志文件)。在这样的日志文件的备份副本可以得到正确的数据库状态的时刻。
转储海量转储和增量转储可以分为两种方式。
大规模倾倒每一个转储所有数据库。增量转储每次更新只转储上次转储数据。从恢复的角度来看,大量的转储的备份副本恢复一般更容易。如果该数据库,事务处理,是非常频繁,增量转储方式更实用,更有效。
7。日志文件?为什么要建立一个日志文件?
答案:
(1)日志文件是用来记录交易文件对数据库的更新操作。
(2)建立的日志文件的目的:交易故障恢复系统故障恢复;协助媒体恢复的备份副本。
登记日志文件为什么要写入日志文件后,写入到数据库?
A:
的数据写入到数据库中,两种不同的操作,这个后的日志记录被写入到日志文件中。这两个操作之间可能发生了故障,即这两个写操作只完成了。
先写一个数据库,而不是变化的运行记录中,小数点后不能被恢复这一。如果你写的日志,但没有数据库,恢复执行UNDO操作,不影响数据库的正确性。所以一定要确保你写的日志文件,日志记录写入到日志文件中,然后写入到数据库的变化。
9,测试是针对不同的故障恢复策略和方法。 (也就是说,如何进行交易系统故障恢复故障恢复介质恢复?)
A:
交易故障恢复:
事务故??障的恢复是自动完成的DBMS ,是对用户透明。
DBMS执行恢复步骤:
(1)反向扫描文件日志(即从最后一次扫描日志文件),则该事务更新操作。
(2)事务的更新操作执行逆操作。关于日志记录更新前值吗?写入到数据库中。
(3)反向扫描日志文件,做同样的。
(4)?下去,直到你读的开始标记本次交易,交易失败恢复完整。
A:
系统故障恢复:
系统出现故障可能会导致数据库处于不一致的状态:
首先,没有完成的交易数据库的更新可能已被写入到数据库中;
已提交的交易数据库的更新可能还留在缓冲区中,并没有写入到数据库。
恢复操作(UNDO)的未竟事业出现故障,重做(REDO)已完成的交易。
恢复步骤:
(1)正向扫描日志文件,以确定该交易已提交在故障发生前队列中(REDO队列的)和未完成的事务队列(UNDO队列)。
(2)UNDO处理队列中的个别交易的。
UNDO处理方法是反向扫描日志文件,更新操作执行相反的操作,每一个UNDO事务迫在眉睫的“价值”(前映像)记录写入到数据库中,然后再更新。
(3)治疗重做重做队列事务。
REDO处理方法:正向扫描日志文件,每个REDO事务重新执行操作的日志文件登记。即将推出的日志记录写入到数据库中的更新值“(后映像)。
分辨率:
步骤(1)如何确定的REDO队列和UNDO队列,请考虑一下吧。 BR />的算法如下:
1)创建两个事务队列:
·UNDO-LIST:需要执行undo操作的事务集;
·REDO-LIST:需要执行重做操作事务集;
事务队列最初是空的。
)从日志文件头,正向扫描日志文件
是否有新的开始(遇到BEGIN TRANSACTION)交易钛,钛暂时放入UNDO-LIST队列;
·如果提交的事务(遇到结束事务)TJ TJ从队列undo-list中的REDO-LIST队列;
直到最后的日志文件A:
介质故障恢复:
介质故障是最严重的故障。
恢复方法是重装数据库,然后重做已完成交易的过程是:
(1 )DBA装入最新的数据库备份(从故障时间最近的转储副本),将数据库恢复到一致的状态转储。
(2)DBA的日志文件的副本加载转储结束时间
(3)DBA启动系统恢复命令来完成还原的DBMS的功能,重做已完成的交易。
解析
1)我们假设静态转储的步骤(1)安装数据库的备份副本。
2)如果您使用的是静态和动态转储步骤(1)将数据库的备份副本是不够的,需要同时加载的副本日志文件的转储开始治疗后的时间,以获得正确的数据库的备份副本。
3)(2)步算法来重做已完成的交易:
正向扫描日志文件,以找出识别在故障发生之前提交的交易中,计入的重量队列
B。再次向前扫描日志文件,重做重做队列中的所有交易。即将推出的日志记录写入到数据库中的更新值。
>
10。检查点恢复技术的优势是什么?
A:
测井技术进行数据库恢复,恢复子系统必须搜索日志,以确定哪些事务需要重做,哪些事务需要。一般来说,你需要检查所有的记录。这样做有两个问题:
首先,搜索整个日志将花费大量的时间。
REDO处理的事务实际上写的更新操作数据库恢复子系统又执行这些操作,浪费了大量的时间。
检查点技术,以解决这些问题。
11。师叔检查点的恢复步骤。
①从启动文件的最后一个检查点记录在日志文件中的地址找到最后一个检查点记录在日志文件中找到的地址。
②检查站的检查点记录的建立时间列表中的所有运行的事务ACTIVE-LIST。
创建两个事务队列:
·UNDO-LIST:需要执行undo操作的事务集;
·REDO-LIST:集交易需要执行恢复操作;
ACTIVE-LIST暂时到UNDO-LIST队列,REDO队列暂时空。
③从检查点开始正向扫描日志文件
任何新的起点事务钛undo-list中的Ti暂时放置在队列中;
·如果提交事务TJ,TJ移动从UNDO-LIST队列,REDO-LIST队列,直到最后的日志文件;
>④UNDO操作执行undo-list中的每一笔交易REDO-LIST中的每个事务执行REDO操作。
12。数据库镜像?使用?
答案:
数据库镜像是根据对DBA的要求,自动复制到另一个磁盘上的关键数据在整个数据库或部分。每当主数据库更新时,DBMS自动复制更新后的数据,在过去,DBMS自动保证镜像的一致性
使用数据库镜像的数据和主数据。:
一个用于数据库恢复。当介质故障的镜像磁盘继续提供使用的数据库管理系统自动镜像磁盘数据恢复的数据库,并且不需要关闭系统并重新安装该数据库的副本。
二是要提高无故障,当用户的数据加排他锁来其他用户可以读取的数据的数据库的可用性。镜像数据库,无需等待用户释放该锁。
㈤ 数据库原理及应用试题,高手帮忙
答案 (1)4 (2)3 (3)3 (4)4 (5)2 (6)3 (7)2 (8)4 (9)3 (10)4
㈥ 几个数据库技术及应用题目
单选题 1.下面哪个不是数据库技术的主要特点 (D)
A.数据的结构化 B.数据的冗余度小 C.较高的数据独立性 D.程序的标准化
2.下列叙述正确的为(B)
A.关系中允许有重复的元组,也允许有重复的属性名
B.关系中允许有重复的元组,不允许有重复的属性名
C.关系中不允许有重复的元组,允许有重复的属性名
D.关系中不允许有重复的元组,也不允许有重复的属性名
3.如果两个实体之间的联系是1:M,则实现l:M联系的方法是 (C)
A.将两个实体转换成一个关系
B.将两个实体转换的关系中,分别加入另一个关系的主码。
C.将“1”端实体转换的关系的主码,放入“M”端实体转换的关系中
D.将“M”端实体转换的关系的主码,放入“1”端实体转换的关系中
4.SQL的标准库函数COUNT,SUM,AVG,MAX与MIN等,不允许出现在下列语句 (D)中 A.SEIECT
B.HAVING C.GROUP……HAVING D.WHERE
填空题
1、班级和学生之间的联系是(一对多)联系,班级和班长之间的联系是( 一对一 )联系,学生和课程之间的
联系是( 多对多 )联系。
2、在数据库的三级模式结构中,外模式有( 多个 ),模式和内模式只有( 一个 )。
3、DB的含义是( 数据库 ),DBS的含义是( 数据库系统 ),DBMS的含义是( 数据库管理系统 )。
简答题:
1、SQL Server中的语句权限的含义及内容。
语句权限主要指用户是否具有权限来执行某一语句,这些语句通常是一些具有管理性的操作,如创建数据库、表、存储过程、触发器等。
2、SQL Server中数据库和应用程序的安全机制有哪四种?
用户标识与鉴别;存取控制;视图机制;审计机制等
3、事务故障的恢复方法。
反向扫描日志文件,查找该事务的更新操作;对该事务的更新操作进行逆向操作;继续反向扫描日志文件,查找该事务的其他更新操作并逆向操作;继续处理,直到事务的开始标记。
4、E-R图设计中,合并分E-R图时可能产生的冲突及解决办法。
冲突主要有三种:属性冲突、命名冲突和结构冲突。属性冲突需要靠各部门协商讨论解决,但也非易事;命名冲突通常也像处理属性冲突一样,通过讨论协商等行政手段进行解决;结构冲突主要是根据应用的语义对实体联系
的类型进行综合或调整。
5、事务的四个性质。
(1)原子性(Atomicity)
事务的原子性是指事务中包含的所有操作要么全做,要么全不做(all or none)。
(2) 一致性(Consistency)在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态。 事务应该把数据库从一个一致埋运性状态转换到另外一个一致性状态。
(3) 隔离性(Isolation)事务隔离性要求系统必须保证事务不受其他并发执行的事务的影响,也即要达到这样一种效果:对于任何一对事务T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前已经结束,要么在 T1 完成之
后才开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。
(4)持久性(Durability)一个事务一旦成功源液唯完成,它对数据库的改变必须是永久的,即便是在系统遇雹培到故障的情况下也不会丢失。数据的重要性决定了事务持久性的重要性。
6、有两个实体集,若它们之间存在着一个M:N联系、1:M联系和1:1联系,根据ER模型转换成关系数据库的规则,这个ER结构转换成表的个数分别是多少?
M:N联系:三个表,1:M联系:两个表,1:1联系:两个表
7、举例说明参照完整性规则中对外码有何要求。
若属性F是基本关系R的外码,它与基本关系S的主码KS相对应,则对于R中每一元组在F上的值必须为:或者为空,或者等于S中某个元组的主码值。比如:学生关系中每个元组的专业号属性只能取下面两类值:空值,表示未给该
学生分配专业;非空值,这时该值必须是专业关系中某个元组的专业号值。
8、举例说明SQL Server中有哪3类触发器。
INSERT触发器、UPDATE触发器和DELETE触发器 (不再举例)
SQL语言设计题
将借书日期在2006年4月以前的借阅记录存入临时的超期借阅表。
select * into #超期借阅表 from 借阅记录表 where 日期<'2006-04-01'
设有如下三个关系模式,用SQL语句完成:
学生(学号,姓名,性别,年龄,专业)
课程(课程号,课程名,学分,先行课)
选课(学号,课程号,任课教师,成绩)
1、创建电子商务专业学生成绩视图,属性包括学号、姓名、课程名和成绩。
create view '电子商务专业学生成绩视图' as
select s.学号,s.姓名,c.课程名,s_c.成绩 from table 学生 s,课程 c,选课 s_c where
s.学号=s_c.学号 and s_c.课程号=c.课程号 and s.专业='电子商务'
2、创建计算机应用专业的学生成绩统计视图,属性包括学号、姓名、总成绩和平均成绩。
create view ‘计算机专业学生成绩统计视图’ as
select s.学号,s.姓名,sum(成绩),avg(成绩) from 学生 s,选课 s_c
where s.学号=s_c.学号 and 专业='计算机应用'
group by 学号,姓名
3、查询没有成绩的学生的学号、姓名和课程号。
select distinct s.学号,s.姓名,s_c.课程号 from s,s_c where s.学号=s_c.学号 where s_c.成绩=0
4、查询选修课程号为001且成绩为最好的学生的学号、姓名和成绩
select s.学号,s.姓名,max(s_c.成绩) from 学生 s,选课 s_c where s.学号=s_c.学号 and s_c.课程号=‘001’
5、查询至少选修了二门及二门以上课程的学生的学号
select 学号 from 选课表 group by 学号 having count(*)>=2
㈦ 《数据库原理应用》简答题(数据库原理与应用试题及答案)
1.数据库:是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些脊稿昌表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。数据库管理系统:随着计算机在信息处理、情报检索及各种管理系统的不断发展,使用计算机时需要处理大量的数据、建立和检索大量的表格,将这些数据和表格按一定的规律组织起来,以便处理更有效、检索更迅速、用户使用更方便,于是就出现了数据库管理系统。数据库和数据库软件就组成了数据库管理系统。数据库管理系统有各种类型,目前许多计算机包括微型机都配有数据库管理系统,如FoxPro、Oracle、sqlserver等。
2.数据库系统由数据库(DB),数据管理系统(DBMS),应用程序,用户和硬件敬饥组成,其中最关键的部分是数据库.3.主关键字(Primarykey):用来唯一辨别表格里记录的备选关键字。外来关键字(Foreignkey):表格内匹配同一表格或者另一表格里备选关键字的一个列或者一组列。外来键允许你将樱扒一个表格里的记录和另一个表格里的数据相关联。有主外键关系,进行两个表或多个表的关联。
㈧ 数据库应用题(在线等)
一、select salary from emp where ename = 'AAA';
二、select dname from dept where dno = (select dno from emp where eno = C1);