2021数据结构考研《数据库系统概论》考研真题大题解析1、设计与应用题1某汽车维修公司需建立一个汽车维修数据库,该数据库中需要存储和管理下列信息:车辆信息:车牌号,车型,发动机号,行驶里程,车辆所有人,联系电话维修项目:项目号,项目名称,维修费汽车备件:备件号,备件名称,备件单价,库存数量以上数据之间存在下列约束:可以对一个车辆进行多个维修项目,每个维修项目可用于多个车辆,维修项目完成后要在数据库中记录维修时间;一种备件可用于多个维修项目,每个维修项目最多只使用一种备件,但每种备件的数量可以是多个。
①根据以上需求构建该数据库的概念模型(画E-R图)。
②假设车辆信息有如下约束:车牌号:标识属性,取值形式为:第1个字符是“京”,第2个字符为“A”到“Z”的字母,第3到第7个字符均是“0”到“9”的数字。
此列采用普通编码定长字符型,非空;车型:普通编码定长字符型,长度为6,默认值为“轿车”;发动机号:普遍编码定长字符型:长度为6,非空;行驶里程:整型,取值大于或等于0;车辆所有人:普通编码定长字符型,长度为8,非空;联系电话:普通编码定长字符型,长度为13,取值唯一。
写出创建满足上述要求的车辆信息表的SQL语句。
(注:表名和列名均用题中给出的中文名,SQL语句中大、小写字母均可。
)答:概念模型如下:②【解析】①根据题意可知,一个车辆可以进行多个项目的维修,一个维修可以用于多个车辆,所以实体车辆信息与维修项目之间是多对多的关系;一种配件可用于多个维修项目,但一个维修项目最多只能用一种配件,所以配件与维修项目是一对多的关系。
②SQL语句中车牌号的取值形式限定可用CHECK约束来表示。
2现有关系模式:教师授课(教师号,姓名,职称,课程号,课程名,学分,教科书名)其函数依赖集为:{教师号→姓名,教师号→职称,课程号→课程名,课程号→学分,课程号→教科书名}①指出这个关系模式的主码。
②这个关系模式是第几范式,为什么?③将其分解为满足3NF要求的关系模式(分解后的关系模式名自定)答:①主码为:(教师号、课程号)②第1范式,因为存在部分依赖。
③分解方法为:教师表(教师号,姓名,职称)课程表(课程号,课程名,学分,教科书名)教师授课表(教师号,课程号)【解析】①外码的数据项需参照主码的数据项来操作,主码和外码是用来实现参照完整性的。
②第一范式:(1NF)无重复的列;第二范式:(2NF)属性完全依赖于主键;第三范式:(3NF)属性不依赖于其它非主属性。
3为在某种程度上保证某数据库系统可靠地运行,在SQL Server 2000环境中,对其制定有下列三种备份策略。
假设对此数据库进行一次完全备份需要4小时,差异备份需要2小时,日志备份需要1小时。
设所有备份都是从凌晨1:00开始。
策略1:每周周日进行一次完全备份,每周周一至周六每天进行一次日志备份;策略2:每周周日进行一次完全备份,每周周一至周六每天进行一次差异备份;策略3:每天进行一次完全备份。
①假设需要保留一年的备份数据,比较三种备份策略所占用的空间。
②比较每种备份策略的备份和恢复速度。
答:①占用空间量从大到小排序为:策略3,策略2,策略1;②备份速度从快到慢排序为:策略1,策略2,策略3;恢复速度从快到慢排序为:策略3,策略2,策略1。
【解析】完全备份不考虑文件的存档属性,备份全部选中的文件夹,所以占用空间最大,但是速度最快;差异备份备份上一次完全备份后发生变化的所有文件,是针对于完全备份的,恢复时需要完全数据备份和最近的差异备份;日志备份需要有完全数据备份,备份自上次backup log语句到当前日志尾之间的所有数据库修改;日志备份的数据量少,只备份上次备份到现在的修改,恢复时需要完全数据库备份和所有的日志备份,占用空间最小,但恢复时间最慢。
4有两张关系表:Students(SID,SName,Sex,Dept)Prizing(SID,PName,Type,PDate)Students表描述的是学生基本信息,Prizing表描述的是学生获奖信息。
①若在应用程序中经常使用如下查询语句:SELECT S.SID,SName,PName,Type FROM Students AS S JOIN Prizing AS P ON S.SID=P.SID;请问能否使用聚集文件提高此查询的性能?并给出原因。
②为了提高查询性能,数据库管理员在Students表的SName列上建立了一个非聚集索引SName_ind。
如果应用程序使用如下语句查询数据:SELECT*FROM Students WHERE SName like‘%华’;请问SName_ind索引是否能够提高语句的查询速度,并给出原因。
答:①可以用聚集文件提高查询性能。
因为聚集文件将不同关系表中有关联关系的记录存储在一起,减少了系统的物理I/O操作次数,提高了查询性能。
②此索引不能提高该语句的查询速度。
因为该索引是建立在SNAME上的非聚集索引,以SNAME首字母排序,而查询语句查询的名字是最后一个“华”的SNAME,所以仍然需要全部扫描students表,因此不能提高该语句的查询速度。
【解析】聚集文件本身存储不同类型表的联系,能够减少表间的连接操作,提高查询性能。
而非聚集索引对于以SNAME首字母排序时有效。
5某公司需建立产品信息数据库,经调查其业务要求如下:Ⅰ.一种产品可以使用多个不同种类的部件,也可以使用多个不同种类的零件;一种部件至少被用在一种产品中;一种部件可以由多个不同种类的零件组成;一种零件至少被用在一种产品或一种部件中;Ⅱ.对于一种具体的部件,要记录这种部件使用的各种零件的数量;Ⅲ.对于一种具体的产品,要记录这种产品使用的各种部件数量和各种零件数量,但部件所使用的零件数量不计入该种产品的零件数量;Ⅳ.一个供应商可供应多种零件,但一种零件只能由一个供应商供应。
根据以上业务要求,某建模人员构建了如下E-R图:此E-R图中的实体的属性完整,但实体、联系的设计存在不合理之处。
①请重新构建合理的E-R图,使之符合业务要求,且信息完整。
②根据重构的E-R图给出符合3NF的关系模式,并标出每个关系模式的主码和外码。
答:①重新构建后的E-R图如下:②符合3NF的关系模式:(带下划线的为主码属性)产品(产品号(PK),产品名称,型号,装配图号)部件(部件号(PK),部件名称)零件(零件号(PK),零件名称,供应商号(FK)产品_部件(产品号(FK),部件号(FK),部件数量)产品_零件(产品号(FK),零件号(FK),零件数量)部件_零件(部件号(FK),零件号(FK),零件数量)供应商(供应商号(PK),供应商名称,联系电话)【解析】题中实体设计中存在明显的不合理之处,比如供应商应该是一个独立的实体。
此外,没有准确的表现产品和零件之间直接的联系。
一种产品可以使用多个不同种类的部件,也可以使用多个不同种类的零件,说明产品与零件是有直接关系的,所以需要一个能表示它们之间的关系的实体,否则,设计出来的关系模式就会存在大量的数据冗余。
6在SQL Server 2000中,有教师表Teachers(TeaeherID,Name,LeaderID,其中TeacherID是主码,类型是长度为4的普通编码定长字符串,且每位是0~9的数字字符;Name的类型是长度为10的普通编码可变长字符串;LeaderID 是每个教师的领导的TeacherID。
①写出创建Teachers表的SQL语句,要求语句中包含所有的约束。
②现要查询TeaeherID为“1234”的教师的领导的上级领导的TeacherID,请给出相应的SQL语句,要求只使用一条SQL语句实现,且此语句中不允许包含子查询。
答:①②【解析】应使用CREATE语句创建表格;可以通过对该表进行自我连接查询领导的信息,“1234”的条件约束可以通过WHERE子句来实现。
2简答题1有如下2个关系表:Emp(eid,ename,age,did,salary),其各列含义为:职工号,姓名,年龄,部门号,工资Dept(did,dname,mgr_id),其各列含义为:部门号,部门名称,部门经理职工号写出一条SQL语句,查询工资高于10000,且与他所在部门的经理年龄相同的职工姓名。
答:select a.*from Emp a,Dept b,Emp c where a.did=b.did and b.mgr_id =c.eid and a.salary>10000 and a.age=c.age;【解析】select和where的语法为:SELECT 列名称FROM 表名称WHERE 列运算符值;2有学生表(学号,姓名,年龄,性别,系名,专业名,班号),设一个系可有多个专业,每个专业可有多个班,各班班号不重复,一个学生只在一个班学习。
现经常需要按“系名”和“班号”进行查询,为提高查询效率,需要为“系名”和“班号”两个列建立一个非聚集索引,建立此索引有下列两种方法:方法1:索引列顺序为(系名,班号)。
方法2:索引列顺序为(班号,系名)。
①这两种方法哪个更合理?请简要说明原因。
②针对你认为合理的方法,写出创建该索引的SQL语句。
答:①方法1更加合理,理由如下:更加有利于减少索引层次,提高查询效率;更加符合使用习惯;更加便于(系、班)进行统计。
②create index index_1 on学生表(系名,班号);【解析】SQL Server在创建主键或其它索引时自动将字段的顺序设置为升序排列,这样做的目的是为了保持与SQL Server早期版本的兼容性。
创建索引时索引列的顺序应该按照常用查询中的排序方式排序。
3考虑定义在事务集(T1,T2,T3)上的调度S1和S2,S1与S2是否是冲突等价的?为什么?答:不是等价冲突,因为T1的write(Q)和T2的write(Q)是冲突的,不可交换。
【解析】不同事务的一对中的一组操作,有些是冲突的,有些是不冲突的。
不冲突操作的次序可以互相调换,不致不会影响执行的结果。
冲突等价调度是指一个调度S,通过调换S中的不冲突操作次序所得到的新调度称为S的冲突等价调度。
不冲突操作有两类:一是对同一数据均为读操作,即Ri(x),Rj(x);二是对不同数据对象的一组操作中可以有写的操作,即Ri(x),Wj(y)或Wi(x)Wj(y)。
因为T1和T2对数据对象Q进行了相同的写操作,所以是冲突的,所以S1和S2不是冲突等价的。
3填空题1设某数据库中有作者表(作者号,城市)和出版商表(出版商号,城市),请补全如下查询语句,使该查询语句能查询作者和出版商所在的全部不重复的城市。
SELECT城市FROM作者表_____SELECT城市FROM出版商表;【答案】EXCEPT查看答案【解析】EXCEPT语句的作用是查询两个数据表中除“公共”数据以外的数据信息,即查询两个数据表中的“除外”数据信息。