2026年数据库系统原理及应用教程习题附答案_第1页
2026年数据库系统原理及应用教程习题附答案_第2页
2026年数据库系统原理及应用教程习题附答案_第3页
2026年数据库系统原理及应用教程习题附答案_第4页
2026年数据库系统原理及应用教程习题附答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年数据库系统原理及应用教程习题附答案一、选择题1.以下关于关系模型的描述中,错误的是()A.关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成B.关系的候选码是指能唯一标识元组的一个或多个属性的集合C.关系的外码必须与主码来自同一关系的同一属性D.关系中的元组顺序和属性顺序均不影响数据语义答案:C(外码可以引用同一关系或不同关系的主码,属性名可以不同,只要数据类型一致即可)2.事务的ACID特性中,“隔离性”主要通过()实现A.日志记录B.锁机制或时间戳排序C.数据冗余D.完整性约束答案:B(隔离性通过并发控制机制如锁或时间戳保证事务间互不干扰)3.若关系R(A,B,C)和S(C,D,E)进行自然连接,则结果关系的属性个数为()A.3+3=6B.3+3-1=5C.3+3-2=4D.取决于C属性在两关系中的取值是否重叠答案:B(自然连接自动去除重复的公共属性C,故属性个数为3+3-1=5)4.以下关于B+树索引的描述,正确的是()A.所有叶子节点通过指针连接,便于范围查询B.非叶子节点存储数据记录的指针C.插入操作不会导致树的高度变化D.适用于哈希索引无法处理的等值查询答案:A(B+树叶子节点包含全部关键字和指向记录的指针,且叶子间有顺序指针,支持范围查询;非叶子节点仅存储索引键和子节点指针;插入可能导致分裂,可能改变树高;哈希索引更适合等值查询)5.数据库恢复的基础是()A.数据转储和日志文件B.并发控制C.完整性约束检查D.权限管理答案:A(转储提供数据库备份,日志记录事务操作,两者结合是恢复的核心)二、简答题1.简述ER模型向关系模型转换的主要规则,并举例说明弱实体集的处理方法。答案:ER模型转换关系模型的规则包括:(1)实体集转换为关系,属性为关系属性,主码为实体主码;(2)1:1联系可合并任一实体关系,或独立为关系(主码为任一实体主码);(3)1:n联系可合并到n端实体关系(添加1端主码作为外码),或独立为关系(主码为n端主码);(4)m:n联系必须独立为关系(主码为两端主码的组合);(5)属性中的复合属性分解为简单属性,多值属性转换为独立关系(与原实体主码组成主码)。弱实体集无独立主码,依赖强实体集存在(如“维修记录”依赖“设备”)。转换时,弱实体关系的主码由强实体主码(作为外码)和弱实体的部分码(自身的唯一标识属性)共同组成。例如,强实体“设备”(设备ID,名称),弱实体“维修记录”(记录号,时间,描述),其中“记录号”是部分码,转换后关系为:维修记录(设备ID,记录号,时间,描述),主码为(设备ID,记录号),设备ID是外码引用“设备”的设备ID。2.说明关系代数中σ(选择)、π(投影)、⋈(自然连接)操作的区别与联系,并给出一个综合使用三者的示例。答案:区别:σ是一元操作,基于条件从行方向筛选元组;π是一元操作,从列方向选取属性;⋈是二元操作,基于公共属性等值连接两个关系,自动去除重复属性列。联系:三者均为关系代数的基本操作,常组合使用完成复杂查询。示例:关系R(学生ID,姓名,学院),关系S(学生ID,课程ID,成绩)。查询“信息学院学生的课程成绩”,步骤为:(1)σ学院=‘信息学院’(R)筛选信息学院学生;(2)将结果与S自然连接(公共属性学生ID),得到信息学院学生的所有课程记录;(3)π姓名,课程ID,成绩投影出需要的属性。综合表达式为:π姓名,课程ID,成绩(σ学院=‘信息学院’(R)⋈S)。3.简述数据库事务中“丢失修改”“不可重复读”“脏读”的含义,并说明如何通过锁机制解决。答案:丢失修改:事务T1和T2同时修改同一数据,T1的修改被T2覆盖,导致T1的修改丢失。例如T1读数据A=100,T2读A=100,T1修改A=120并提交,T2修改A=110并提交,最终A=110,丢失了T1的120。不可重复读:事务T1两次读取同一数据,期间T2修改了该数据,导致T1两次读取结果不一致。例如T1第一次读A=100,T2修改A=200并提交,T1第二次读A=200,与第一次结果不同。脏读:事务T1修改数据后未提交(如回滚),事务T2读取了该未提交数据,后续T1回滚,导致T2使用了无效数据。例如T1将A=100改为200(未提交),T2读A=200,T1回滚A=100,T2的A=200为脏数据。锁机制解决方法:采用两阶段锁协议(2PL),事务在操作前申请锁(读锁或写锁),释放锁后不再申请新锁。对于丢失修改,要求事务在修改数据前加写锁(排他锁),直到事务结束后释放,避免其他事务同时修改。对于不可重复读和脏读,可通过升级锁粒度(如使用可重复读隔离级别)或强制读操作加读锁(共享锁),并保持到事务结束,防止其他事务修改。4.比较聚集索引与非聚集索引的区别,说明在什么场景下适合创建聚集索引。答案:区别:(1)聚集索引决定数据行在磁盘上的物理存储顺序,一个表只能有一个聚集索引;非聚集索引不改变数据物理顺序,一个表可有多级非聚集索引。(2)聚集索引的叶子节点直接存储数据行;非聚集索引的叶子节点存储索引键和对应的行指针(或聚集索引键)。(3)聚集索引的查询效率在范围查询时更高(因数据物理连续);非聚集索引适合等值查询或频繁查询的列。适合创建聚集索引的场景:(1)列值经常用于范围查询(如按时间范围查询订单);(2)列值相对唯一且更新不频繁(因聚集索引调整会导致大量数据移动);(3)表的主键(通常作为聚集索引,因主键查询频繁且值唯一);(4)表经常被顺序访问(如按ID顺序提供报表)。5.简述数据库完整性约束的类型及其作用,并举例说明CHECK约束的使用。答案:完整性约束包括:(1)实体完整性:保证主码唯一且非空,如学生表的“学号”为主码,不允许重复或NULL。(2)参照完整性:保证外码要么是NULL(允许时),要么匹配被参照关系的主码值,如选课表的“学号”外码必须存在于学生表的“学号”中。(3)用户定义完整性:根据业务规则定义的约束,如CHECK约束、UNIQUE约束、DEFAULT约束等。CHECK约束用于限制列的取值范围或条件。例如,员工表中“年龄”列要求在18到65岁之间,可定义:CHECK(年龄>=18AND年龄<=65);再如订单表中“数量”必须大于0,定义:CHECK(数量>0)。若插入或更新数据违反CHECK约束,数据库将拒绝操作并报错。三、应用题1.某科研管理系统需要管理以下信息:科研人员:工号(唯一)、姓名、职称(教授/副教授/讲师)、所属部门科研项目:项目编号(唯一)、名称、类别(重点/一般)、经费、起始时间、结束时间参与关系:科研人员可参与多个项目,项目可由多个科研人员参与,需记录参与人员的角色(负责人/成员)和贡献度(0-100的整数)(1)设计该系统的ER图(需标注实体、属性、联系及联系类型)。(2)将ER图转换为关系模型,注明主码和外码。(3)用SQL创建“项目”表,要求“类别”只能是“重点”或“一般”,“经费”大于等于10000元。答案:(1)ER图设计:实体“科研人员”:属性{工号(主码),姓名,职称,所属部门}实体“科研项目”:属性{项目编号(主码),名称,类别,经费,起始时间,结束时间}联系“参与”:m:n联系(一个科研人员参与多个项目,一个项目有多个科研人员参与),属性{角色,贡献度}(2)关系模型转换:科研人员(工号,姓名,职称,所属部门)主码:工号科研项目(项目编号,名称,类别,经费,起始时间,结束时间)主码:项目编号参与(工号,项目编号,角色,贡献度)主码:(工号,项目编号);外码:工号→科研人员.工号,项目编号→科研项目.项目编号(3)SQL创建项目表:CREATETABLE科研项目(项目编号CHAR(10)PRIMARYKEY,名称VARCHAR(100)NOTNULL,类别VARCHAR(4)CHECK(类别IN('重点','一般')),经费NUMERIC(10,2)CHECK(经费>=10000),起始时间DATENOTNULL,结束时间DATENOTNULL);2.已知关系R(A,B,C)和S(C,D,E)的元组如下:R:(a1,b1,c1),(a2,b2,c2),(a3,b3,c1)S:(c1,d1,e1),(c2,d2,e2),(c3,d3,e3)(1)计算R⋈S(自然连接)的结果。(2)计算πA,D(σB='b1'(R)×S)(笛卡尔积后选择投影)。(3)用关系代数表达式表示“查询R中C属性值在S中存在的元组”。答案:(1)自然连接基于公共属性C等值连接,结果如下:(A,B,C,D,E)(a1,b1,c1,d1,e1)(a3,b3,c1,d1,e1)(a2,b2,c2,d2,e2)(2)步骤:σB='b1'(R)得到元组(a1,b1,c1);与S做笛卡尔积得到:(a1,b1,c1,c1,d1,e1),(a1,b1,c1,c2,d2,e2),(a1,b1,c1,c3,d3,e3);投影A,D得到:(a1,d1),(a1,d2),(a1,d3)(3)表达式:σC∈S.C(R)或R⋈S[πC(S)](先对S投影C得到C的集合,再与R做选择)3.考虑以下事务调度序列,其中T1、T2为事务,R(X)表示读X,W(X)表示写X:T1:R(A),W(A),R(B),W(B)T2:R(B),W(B),R(A),W(A)调度S:R1(A),R2(B),W1(A),W2(B),R1(B),R2(A),W1(B),W2(A)(1)画出该调度的优先图(冲突图)。(2)判断该调度是否可串行化,说明理由。(3)若T1的隔离级别为“可重复读”,T2的隔离级别为“读未提交”,分析可能出现的异常。答案:(1)优先图节点为T1、T2。冲突操作包括:W1(A)与R2(A):T1→T2W2(B)与R1(B):T2→T1W1(B)与W2(B):T1→T2(因W1(B)在W2(B)前)W2(A)与W1(A):T2→T1(但W1(A)先于W2(A),实际冲突为W1(A)→W2(A))最终优先图存在T1→T2和T2→T1的边,形成环。(2)不可串行化。优先图存在环,说明调度无法等价于任何串行调度(T1→T2或T2→T1)。(3)T1(可重复读)会锁定读取的A、B,保证两次读同一数据结果一致;T2(读未提交)允许读取T1未提交的数据。可能出现:T1读A后写A(未提交),T2读A(脏读);T2写B后,T1第二次读B(因可重复读,T1仍读到初始B值,避免不可重复读);最终T1提交后,T2的写可能覆盖T1的写(丢失修改)。4.某电商数据库中有订单表(订单ID,用户ID,下单时间,总金额)和订单明细表(明细ID,订单ID,商品ID,数量,单价)。(1)写出SQL查询:查询2025年下单且总金额超过1000元的用户ID及其总金额,按总金额降序排列。(2)为提高该查询效率,建议在哪些列上创建索引?说明理由。答案:(1)SQL查询:SELECT用户ID,总金额FROM订单表WHERE下单时间BETWEEN'2025-01-01'AND'2025-12-31'AND总金额>1000ORDERBY总金额DESC;(2)建议索引:在订单表的“下单时间”列创建索引:因查询条件包含时间范围筛选,索引可快速定位2025年的订单。在订单表的“用户ID”和“总金额”列创建复合索引(或覆盖索引):若索引包含用户ID和总金额,查询可直接从索引获取数据,避免回表;同时总金额用于过滤和排序,复合索引可优化排序性能。5.假设数据库系统发生介质故障(如磁盘损坏),请描述恢复的主要步骤,并说明日志文件在其中的作用。答案:恢复步骤:(1)安装最新的数据库备份(完全转储或差异转储)到故障磁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论