原文筆記

本課程筆記資料庫系統 · 30 篇
数据库补充习题 70+100 复习索引cs/db/100+70/00-复习索引Day 01 - 数据库100题:单项选择 1-20cs/db/100+70/Day01-数据库100题-选择01-20Day 02 - 数据库100题:单项选择 21-40cs/db/100+70/Day02-数据库100题-选择21-40Day 03 - 数据库100题:单选 41-50,填空 51-60cs/db/100+70/Day03-数据库100题-选择41-50填空51-60Day 04 - 数据库100题:填空 61-80cs/db/100+70/Day04-数据库100题-填空61-80Day 05 - 数据库100题:填空 81-100cs/db/100+70/Day05-数据库100题-填空81-100Day 06 - 数据库70题:试题 1-11cs/db/100+70/Day06-数据库70题-试题01-11Day 07 - 数据库70题:试题 12-25cs/db/100+70/Day07-数据库70题-试题12-25Day 08 - 数据库70题:综合题 1-8cs/db/100+70/Day08-数据库70题-综合01-08Day 09 - 数据库70题:综合题 22-33cs/db/100+70/Day09-数据库70题-综合22-33Day 10 - 数据库70题:综合题 37-47cs/db/100+70/Day10-数据库70题-综合37-47Day 11 - 数据库70题:综合题 48-61cs/db/100+70/Day11-数据库70题-综合48-61Day 12 - 数据库70题:综合题 62-71cs/db/100+70/Day12-数据库70题-综合62-71基础概念与题型全文cs/db/notes/01-基础概念与题型全文SQL语句与数据库操作全文cs/db/notes/02-SQL语句与数据库操作全文数据库编程全文cs/db/notes/03-数据库编程全文数据库设计与规范化全文cs/db/notes/04-数据库设计与规范化全文查询优化、恢复、并发控制全文cs/db/notes/05-查询优化恢复并发控制全文数据库规范化流程cs/db/notes/normalization2025-2026-2 计科数据库系统期末cs/db/pastpapers/25-26cs2024-2025-2 计科数据库系统期末cs/db/pastpapers/db-pastpaper-1数据库系统完整讲义总览与考试题型地图cs/db/tutorial/00-总览与考试题型地图01 数据库基础与关系模型cs/db/tutorial/01-数据库基础与关系模型02 SQL 与关系代数cs/db/tutorial/02-SQL与关系代数03 数据库编程专项:存储过程、触发器、游标、嵌入式 SQLcs/db/tutorial/03-数据库编程专项04 数据库设计、E-R 图与规范化cs/db/tutorial/04-数据库设计ER与规范化05 查询优化专项:关系代数、查询树、优化树cs/db/tutorial/05-查询优化专项06 事务、并发控制与数据库恢复cs/db/tutorial/06-事务并发控制与恢复07 填空选择速记清单cs/db/tutorial/07-填空选择速记清单08 大题答题模板cs/db/tutorial/08-大题答题模板

Day 08 - 数据库70题:综合题 1-8

参考重点:教材第 1 章数据库系统组成,第 2 章关系代数。

1. DBA 的职责是什么?

答案:

DBA 即数据库管理员,主要职责包括:

  1. 参与数据库设计,定义数据库模式、外模式和存储结构。
  2. 定义安全性规则,进行用户授权和权限管理。
  3. 定义完整性约束,保证数据正确、有效、相容。
  4. 制定备份和恢复策略,处理故障恢复。
  5. 监视数据库运行状态,进行性能调优、重组和空间管理。
  6. 维护数据字典和相关文档,协调不同用户和应用对数据库的使用。

讲解:DBA 不是普通程序员,而是数据库系统运行和数据资源管理的负责人。教材第 1 章把 DBA 列为数据库系统组成部分之一。

2. 什么是数据字典?数据字典包含哪些基本内容?

答案:

数据字典是 DBMS 维护的关于数据库中数据的描述信息,也称元数据仓库。

基本内容包括:

  • 数据库、模式、表、视图、索引等对象定义。
  • 属性名、数据类型、长度、取值范围、默认值。
  • 主键、外键、唯一、检查等完整性约束。
  • 用户、角色、权限等安全信息。
  • 存储结构、统计信息、访问路径等系统管理信息。

讲解:数据字典保存“关于数据的数据”。用户数据是业务内容,数据字典描述这些业务内容如何组织和受哪些规则约束。

3. 叙述数据字典的主要任务和作用。

答案:

数据字典的主要任务是集中存储、维护和提供数据库元数据。

作用包括:

  1. 支持 DDL 执行和数据库对象管理。
  2. 支持查询优化器了解表结构、索引和统计信息。
  3. 支持完整性检查和安全性检查。
  4. 支持 DBA 进行监控、维护和文档管理。
  5. 为应用开发人员理解数据库结构提供依据。

讲解:如果没有数据字典,DBMS 就无法知道表有哪些列、列是什么类型、谁有权限访问、哪些约束需要检查。

4. 叙述模型、模式、具体值三者之间的联系和区别。

答案:

  • 数据模型:描述数据、联系、操作和约束的抽象工具,例如关系模型。
  • 模式:用某种数据模型定义出来的数据库结构,是相对稳定的“型”。
  • 具体值:某一时刻数据库中的实际数据,也称实例或当前值,是不断变化的“值”。

联系:数据模型规定能怎样建模;模式是在该模型下对某个数据库结构的定义;具体值必须符合模式及其约束。

讲解:类比编程:数据模型像语言规则,模式像类或表结构,具体值像运行时对象或表中的行。

5. 叙述等值连接与自然连接的区别和联系。

答案:

等值连接是在两个关系的属性之间用等号条件进行连接;自然连接是一种特殊等值连接,它自动比较两个关系中同名属性,并在结果中只保留一份同名属性列。

区别:

  • 等值连接需要明确连接条件,可连接不同名属性。
  • 自然连接按同名属性自动连接。
  • 等值连接结果中通常保留两个被比较属性;自然连接会去掉重复同名属性。

讲解:若 R(A,B) 与 S(B,C) 自然连接,结果属性是 (A,B,C);若做等值连接 R.B=S.B,结果可能是 (R.A,R.B,S.B,S.C)。

6. 举例说明关系参照完整性的含义。

答案:

参照完整性要求一个关系中的外键值,必须为空或等于被参照关系中某个主键值。

例子:

  • Student(Sno, Sname) 中 Sno 是主键。
  • SC(Sno, Cno, Grade) 中 Sno 是外键,引用 Student(Sno)。

则 SC 中每一条选课记录的 Sno 必须在 Student 表中存在,不能出现一个不存在学生的选课记录。

讲解:参照完整性用于维护表之间联系的正确性。SQL Server 中用 FOREIGN KEY ... REFERENCES ... 定义。

7. 将关系代数中的五种基本运算用元组关系演算表达式表示。

答案:

设关系谓词为 R(t)、S(t),元组变量为 t、u、v。

  1. 并:R ∪ S = { t | R(t) OR S(t) }
  2. 差:R - S = { t | R(t) AND NOT S(t) }
  3. 选择:σF(R) = { t | R(t) AND F(t) }
  4. 投影:πA(R) = { u | EXISTS t (R(t) AND u[A] = t[A]) }
  5. 笛卡尔积:R × S = { v | EXISTS r EXISTS s (R(r) AND S(s) AND v = r ∘ s) }

讲解:关系代数是过程性更强的表达,关系演算是声明性表达。元组演算的核心是“用谓词描述结果元组应满足什么条件”。

8. 有三个关系 S、C 和 SC,试用关系代数表达式表示查询。

题面关系:

S

S#SNAMEAGESEX
1李强23男
2刘丽22女
5张友22男

C

C#CNAMETEACHER
K1C语言王华
K5数据库原理程军
K8编译原理程军

SC

S#C#GRADE
1K183
2K185
5K192
2K590
5K584
5K880

为避免歧义,下面使用 SNAME、CNAME 作为姓名和课程名。

8.1 检索“程军”老师所授课程的课程号和课程名。

答案:

πC#,CNAME(σTEACHER='程军'(C))

讲解:先选择教师为程军的课程,再投影课程号和课程名。

8.2 检索年龄大于 21 的男学生学号和姓名。

答案:

πS#,SNAME(σAGE>21 AND SEX='男'(S))

8.3 检索至少选修“程军”老师所授全部课程的学生姓名。

答案:

πSNAME(S ⋈ ((πS#,C#(SC)) ÷ (πC#(σTEACHER='程军'(C)))))

讲解:这是除法。被除数是学生选课对 (S#, C#),除数是程军老师讲授的全部课程号。结果是选了这些全部课程的学生号,再连接 S 取姓名。

8.4 检索“李强”同学不学课程的课程号。

答案:

πC#(C) - πC#(σSNAME='李强'(S) ⋈ SC)

讲解:所有课程号减去李强已选课程号,就是李强未选课程。

8.5 检索至少选修两门课程的学生学号。

答案:

πSC1.S#(σSC1.S#=SC2.S# AND SC1.C#<>SC2.C#(ρSC1(SC) × ρSC2(SC)))

讲解:把 SC 改名成两份,找同一学生对应不同课程的配对。原题括号中写成 C# 应为 S#。

8.6 检索全部学生都选修的课程的课程号和课程名。

答案:

πC#,CNAME(C ⋈ ((πS#,C#(SC)) ÷ (πS#(S))))

讲解:除数是全部学生号,结果是被所有学生都选过的课程号。

8.7 检索选修课程包含“程军”老师所授课程之一的学生学号。

答案:

πS#(SC ⋈ πC#(σTEACHER='程军'(C)))

讲解:“之一”表示至少选一门,所以用连接即可,不用除法。

8.8 检索选修课程号为 K1 和 K5 的学生学号。

答案:

πS#(σC#='K1'(SC)) ∩ πS#(σC#='K5'(SC))

讲解:同时满足两个课程条件,用交集表达最清楚。

8.9 检索选修全部课程的学生姓名。

答案:

πSNAME(S ⋈ ((πS#,C#(SC)) ÷ (πC#(C))))

8.10 检索选修课程包含学号为 2 的学生所修课程的学生学号。

答案:

πS#((πS#,C#(SC)) ÷ (πC#(σS#='2'(SC))))

讲解:结果学生的选课集合必须覆盖 2 号学生的选课集合。这也是除法题。

8.11 检索选修课程名为“C语言”的学生学号和姓名。

答案:

πS#,SNAME(S ⋈ SC ⋈ σCNAME='C语言'(C))

讲解:先找到课程名为 C语言 的课程,再通过 SC 找选修学生,最后连接 S 取学号和姓名。