数据库原理与应用考试题
Ⅰ 数据库原理及应用基础的常见类型题
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自动保证镜像的一致性
使用数据库镜像的数据和主数据。:
一个用于数据库恢复。当介质故障的镜像磁盘继续提供使用的数据库管理系统自动镜像磁盘数据恢复的数据库,并且不需要关闭系统并重新安装该数据库的副本。
二是要提高无故障,当用户的数据加排他锁来其他用户可以读取的数据的数据库的可用性。镜像数据库,无需等待用户释放该锁。
Ⅱ 求《数据库原理与应用》第二版课后习题答案!!!
第6章
一、选择题
1.C2.A3.A4.C5.A6.C7.C8.B9.A10.C11.B12.B13.C14.D15.B
二、填空题
1.文件管理阶段数据库系统管理阶段
2.相互区别实体集
3.域
4.关系
5.数据结构数据操纵数据完整性约束
6.外模式模式内模式
7.模式
8.内模式
9.外模式
第7章
一、选择题
1.A2.C3.B4.B5.D6.A7.D8.C9.D10.B
二、填空题
1.矩形 椭圆 菱形 数字
2.第一
3.命名属性结构
4.参照
5.学号
第8章
一、选择题
1.D2.C3.A4.B5.D
二、填空题
1.数据定义数据操纵数据控制
2.非过程化集合
3.结构化查询语句StructuredQueryLanguage
4.不能
5.select@变量名或select@@变量名
第9章
一、选择题
1.A2.A3.B4.C5.D6.D7.B8.A
二、填空题
1.一多多
2.alterdatabase
3.dbccshrinkfile
4.将数据库userdb缩小到原来的30%
5.dropdatabase
第10章
选择题
1.C2.D3.D4.B5.C
二、填空题
1.可以重名
2.99999.999
3.无
4.altertable
5.primarykey unique foreignkey check default
6.聚集索引非聚集索引
第11章
一、选择题
1.B2.C3.A4.A5.C6.B
二、填空题
1.distinct
2.desc
3.匹配多个字符匹配单个字符
4.orderby
5.groupby
第13章
选择题
1.A2.D3.A4.C5.C
二、填空题
1.子模式基本表视图
2.alterview dropview
第14章
选择题
1.A2.D
二、填空题
1.正确性相容性
2.createrule
3.sp_bindrule
4.droprule
第15章
选择题
1.A2.C3.D4.A
二、填空题
1.alterprocere
2.@参数名
3.exec[ute]<过程名>
4.insert update delete
5.deleted
6.inserted
7.deleted
http://..com/question/440479153.html?oldq=1#answer-1298076427
Ⅲ 数据库原理及应用试题
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.B 15.C 16.A 17.B 18.A 19.D 20.C
1.试述事务的概念及事务的四个特性。
答:
事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。
原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
2.为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。
答:
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。
则可以定义一个事务T,T包括两个操作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q。
3.数据库中为什么要有恢复子系统?它的功能是什么?
答:
因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。
恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。
4.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?
答:数据库系统中可能发生各种各样的故障,大致可以分以下几类:
(1)事务内部的故障;
(2)系统故障;
(3)介质故障;
(4)计算机病毒。
事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据
库数据。
5.据库恢复的基本技术有哪些?
答:
数据转储和登录日志文件是数据库恢复的基本技术。
当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。
6. 数据库转储的意义是什么? 试比较各种数据转储方法。
答:
数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。
静态转储:在系统中无运行事务时进行的转储操作。静态转储简单,但必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。
动态转储:指转储期间允许对数据库进行存取或修改。动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。因为转储期间运行的事务可能修改了某些数据,使得后援副本上的数据不是数据库的一致版本。
为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能得到数据库某一时刻的正确状态。
转储还可以分为海量转储和增量转储两种方式。
海量转储是指每次转储全部数据库。增量转储则指每次只转储上一次转储后更新过的数据。从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来更简单些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。
7. 什么是日志文件?为什么要设立日志文件?
答:
(1)日志文件是用来记录事务对数据库的更新操作的文件。
(2)设立日志文件的目的是: 进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。
8. 登记日志文件时为什么必须先写日志文件,后写数据库?
答:
把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。
如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
9. 针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)
答:
事务故障的恢复:
事务故障的恢复是由DBMS自动完成的,对用户是透明的。
DBMS执行恢复步骤是:
(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
(2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。
(3)继续反向扫描日志文件,做同样处理。
(4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。
答:
系统故障的恢复:
系统故障可能会造成数据库处于不一致状态:
一是未完成事务对数据库的更新可能已写入数据库;
二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。
因此恢复操作就是要撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。
系统的恢复步骤是:
(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
(2)对撤销队列中的各个事务进行UNDO处理。
进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”(Before Image)写入数据库。
(3)对重做队列中的各个事务进行REDO处理。
进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”(After Image)写入数据库。
*解析:
在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。
下面给出一个算法:
1) 建立两个事务队列:
· UNDO-LIST: 需要执行undo操作的事务集合;
· REDO-LIST: 需要执行redo操作的事务集合;
两个事务队列初始均为空。
2) 从日志文件头开始,正向扫描日志文件
· 如有新开始(遇到Begin Transaction)的事务Ti,把Ti暂时放入UNDO-LIST队列;
· 如有提交的事务(遇到End Transaction)Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列;
直到日志文件结束
答:
介质故障的恢复:
介质故障是最严重的一种故障。
恢复方法是重装数据库,然后重做已完成的事务。具体过程是:
(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
(2)DBA装入转储结束时刻的日志文件副本
(3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。
*解析
1)我们假定采用的是静态转储,因此第(1)步装入数据库后备副本便可以了。
2)如果采用的是静动态转储,第(1)步装入数据库后备副本还不够,还需同时装入转储开始时刻的日志文件副本,经过处理后才能得到正确的数据库后备副本。
3)第(2)步重做已完成的事务的算法是:
a. 正向扫描日志文件,找出故障发生前已提交的事务的标识,将其记入重做队列
b. 再一次正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。
10. 具有检查点的恢复技术有什么优点?
答:
利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO,哪些事务需要UNDO。一般来说,需要检查所有日志记录。这样做有两个问题:
一是搜索整个日志将耗费大量的时间。
二是很多需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。
检查点技术就是为了解决这些问题。
11. 试述使用检查点方法进行恢复的步骤。
答:
① 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
② 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。
这里建立两个事务队列:
· UNDO-LIST: 需要执行undo操作的事务集合;
· REDO-LIST: 需要执行redo操作的事务集合;
把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
③ 从检查点开始正向扫描日志文件
· 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列;
· 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列,直到日志文件结束;
④ 对UNDO-LIST中的每个事务执行UNDO操作, 对REDO-LIST中的每个事务执行REDO操作。
12. 什么是数据库镜像?它有什么用途?
答:
数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。
数据库镜像的用途有:
一是用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
Ⅳ VF的题目 数据库原理与应用 求高手帮忙做做 谢谢了
一、 填空
1、在VFP中通过选择菜单来执行VFP命令与在 __命令窗口____输入逐条命令,得到结果是一样的。
2、若ABC=”远程网络教育”,则 ? SUBSTR(ABC,LEN(ABC)/6+7,4)的结果是__教育_______。
3、设Y=1,则执行命令 ? Y>Y+1的结果是____.f.______。
4、学生档案表中有性别 ( C , 2 ),和民族( C , 8 ), 要求找出所有民族是回族的男同学记录的查找条件是_____性别='男' and 民族='回族'_____。
5、打开一个数据表文件后文件,如果当前记录指针是在第10个记录上,则用函数RECNO()函数测试,其结果一定是_____10_____。
6、在数据表中, 图片中数据应存储在____General_______字段中。
7、如果查询是基于多个表的, 这几个表之间必须建立__外键________关系。
8、执行下列命令后,表DB1的当前记录为__6_____,表DB2的当前记录为 ______1___。
SELECT 1
USE DB1
SELECT 2
USE DB2
SELECT 1
SKIP 5
二、 简答题
1、 什么是关系数据库 ? 其特点有哪些 ?
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。
其特征有:
1)实现数据共享2)减少数据的冗余度3)数据的独立性4)数据实现集中控制数据一致性和可维护性,以确保数据的安全性和可靠性
2、 在VFP中 , 查询和视图有何区别 ?
查询生成的结果,只可看,不可改。
视图生成的结果,可看,可改,直接影像数据库内表的内容。
3、 在程序设计中经常使用哪些输入 / 输出命令 ? 试比较其异同点 。
input 输入命令和 print 输出命令或?输出命令
他们一个主要负责数据的采集,另一个负责结果的显示或打印
4、写出编制程序文件和运行程序文件的命令。
modi comm aa.prg 编制程序命令
do aa.prg
三、选择题
1、下面关于数据库系统的叙述中 , 正确的是(d )。
(A)数据库系统只是比文件系统管理的数据更多
(B)数据库系统中的数据的一致性是指数据类型一致
(C)数据库系统避免了数据冗余
(D)数据库系统减少了数据冗余
2、下面有关关系数据库主要特点的叙述中,错误的是(c ) 。
(A)关系中每个属性必须是不可分割的数据单元。
(B)关系中每一列元素必须是类型相同的数据。
(C)同一个关系中不能有相同的字段,也不能有相同的记录。
(D)关系的行、列次序不能任意交换,否则会影响其信息内容。
3、若M=” 95.5” , 则执行命令 ? 30+&M的结果是 ( b )。
(A)3095.5 (B)125.50 (C)30+&M (D)30
4、已知工资=560 , 职称=”副教授” , 性别=”男” , 结果为假的逻辑表达式是(b )。
(A)工资 > 500 .AND. 职称=”副教授” .AND. 性别=”男”
(B)性别=”女” .OR..NOT. 职称=”助教”
(C)工资 > 550 .AND. 职称=”副教授” .OR. 职称=”讲师”
(D)工资 =550 .AND. (职称=”教授” .OR. 性别=”男”)
5、某”职工”表中有职称(C)和工资(N)两个字段,计算所有职称为高工或工程师的工资总额,并将结果赋给内存变量ZGZ,应使用命令(a )。
(A)SUM 工资 TO ZGZ FOR职称=” 工程师” .OR. 职称=” 高工”
(B)SUM 工资 TO ZGZ FOR职称=” 工程师” .OR. ” 高工”
(C)SUM 工资 TO ZGZ FOR职称=” 工程师” .AND. 职称=” 高工”
(D)SUM 工资 TO ZGZ FOR职称=” 工程师” .AND. ” 高工”
6、下列数据中属于字符型数据是( b) 。
A、06/08/04 B、[06/08/04] C、{^06/08/04} D、(06/08/04)
7、表单文件的扩展名为(scx )。
A、FOM B、SCX C、FRM D、VCX
8、在VFP中,逻辑型、日期型和备注型字段的长度分别是(c ) 。
A、1, 8, 128 B、1, 8, 10 C、1, 8, 4 D、1, 10, 4
一、 填空
1、在VFP中通过选择菜单来执行VFP命令与在 __命令窗口____输入逐条命令,得到结果是一样的。
2、若ABC=”远程网络教育”,则 ? SUBSTR(ABC,LEN(ABC)/6+7,4)的结果是__教育_______。
3、设Y=1,则执行命令 ? Y>Y+1的结果是____.f.______。
4、学生档案表中有性别 ( C , 2 ),和民族( C , 8 ), 要求找出所有民族是回族的男同学记录的查找条件是_____性别='男' and 民族='回族'_____。
5、打开一个数据表文件后文件,如果当前记录指针是在第10个记录上,则用函数RECNO()函数测试,其结果一定是_____10_____。
6、在数据表中, 图片中数据应存储在____General_______字段中。
7、如果查询是基于多个表的, 这几个表之间必须建立__外键________关系。
8、执行下列命令后,表DB1的当前记录为__6_____,表DB2的当前记录为 ______1___。
SELECT 1
USE DB1
SELECT 2
USE DB2
SELECT 1
SKIP 5
二、 简答题
1、 什么是关系数据库 ? 其特点有哪些 ?
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。
其特征有:
1)实现数据共享2)减少数据的冗余度3)数据的独立性4)数据实现集中控制数据一致性和可维护性,以确保数据的安全性和可靠性
2、 在VFP中 , 查询和视图有何区别 ?
查询生成的结果,只可看,不可改。
视图生成的结果,可看,可改,直接影像数据库内表的内容。
3、 在程序设计中经常使用哪些输入 / 输出命令 ? 试比较其异同点 。
input 输入命令和 print 输出命令或?输出命令
他们一个主要负责数据的采集,另一个负责结果的显示或打印
4、写出编制程序文件和运行程序文件的命令。
modi comm aa.prg 编制程序命令
do aa.prg
三、选择题
1、下面关于数据库系统的叙述中 , 正确的是(d )。
(A)数据库系统只是比文件系统管理的数据更多
(B)数据库系统中的数据的一致性是指数据类型一致
(C)数据库系统避免了数据冗余
(D)数据库系统减少了数据冗余
2、下面有关关系数据库主要特点的叙述中,错误的是(c ) 。
(A)关系中每个属性必须是不可分割的数据单元。
(B)关系中每一列元素必须是类型相同的数据。
(C)同一个关系中不能有相同的字段,也不能有相同的记录。
(D)关系的行、列次序不能任意交换,否则会影响其信息内容。
3、若M=” 95.5” , 则执行命令 ? 30+&M的结果是 ( b )。
(A)3095.5 (B)125.50 (C)30+&M (D)30
4、已知工资=560 , 职称=”副教授” , 性别=”男” , 结果为假的逻辑表达式是(b )。
(A)工资 > 500 .AND. 职称=”副教授” .AND. 性别=”男”
(B)性别=”女” .OR..NOT. 职称=”助教”
(C)工资 > 550 .AND. 职称=”副教授” .OR. 职称=”讲师”
(D)工资 =550 .AND. (职称=”教授” .OR. 性别=”男”)
5、某”职工”表中有职称(C)和工资(N)两个字段,计算所有职称为高工或工程师的工资总额,并将结果赋给内存变量ZGZ,应使用命令(a )。
(A)SUM 工资 TO ZGZ FOR职称=” 工程师” .OR. 职称=” 高工”
(B)SUM 工资 TO ZGZ FOR职称=” 工程师” .OR. ” 高工”
(C)SUM 工资 TO ZGZ FOR职称=” 工程师” .AND. 职称=” 高工”
(D)SUM 工资 TO ZGZ FOR职称=” 工程师” .AND. ” 高工”
6、下列数据中属于字符型数据是( b) 。
A、06/08/04 B、[06/08/04] C、{^06/08/04} D、(06/08/04)
7、表单文件的扩展名为(scx )。
A、FOM B、SCX C、FRM D、VCX
8、在VFP中,逻辑型、日期型和备注型字段的长度分别是(c ) 。
A、1, 8, 128 B、1, 8, 10 C、1, 8, 4 D、1, 10, 4
Ⅳ 求数据库应用题
数据库语言的目标
要说清这个目标,先要理解数据库是做什么的。
数据库这个软件,名字中有个“库”字,会让人觉得它主要是为了存储的。其实不然,数据库实现的重要功能有两条:计算、事务!也就是我们常说的 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、DBS由哪几个部分组成?
答:DBS由四部分组成:数据库、硬件、软件、数据库管理员。
2.数据库的并发操作会带来哪些问题?
答:数据库的并发操作会带来三类问题:丢失更新问题;不一致分析问题和“脏数据”的读出。
3.简述采用E-R图方法的数据库概念设计的过程。
答:E-R模型的图示法:(1)实体集表示法; (2)属性表法; (3)联系表示法。
层次模型的基本结构是树形结构,具有以下特点:
(1)每棵树有且仅有一个无双亲结点,称为根;
(2)树中除根外所有结点有且仅有一个双亲。
从图论上看,网状模型是一个不加任何条件限制的无向图。
关系模型采用二维表来表示,简称表,由表框架及表的元组组成。一个二维表就是一个关系。
在二维表中凡能唯一标识元组的最小属性称为键或码。从所有侯选健中选取一个作为用户使用的键称主键。表A中的某属性是某表B的键,则称该属性集为A的外键或外码。
关系中的数据约束:
(1)实体完整性约束:约束关系的主键中属性值不能为空值;
(2)参照完全性约束:是关系之间的基本约束;
(3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。
4.简述客户/服务器式DBS的一般结构。此时数据库应用的功能如何划分?
答:DBS :数据库系统(Database System),DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。
Ⅶ 跪求!紧急!数据库原理及应用的试题
一:
(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 = '王老师'))
不能实现的话,留言