十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据库系统概论核心考点精讲:从关系模型到SQL与范式

数据库系统概论核心考点精讲:从关系模型到SQL与范式 简介面向数据库系统概论课程的学习者与备考者这份期末试卷资料系统覆盖了实体联系分类、数据库系统核心、关系模型与关系代数、SQL语言、数据安全、数据依赖、数据库设计、CGI规范及面向对象数据库系统等核心考点适合考前自测与查漏补缺。压缩包内仅含1个PDF文件大小约218KB便于直接下载阅读。已有823人浏览学习可见其具备一定参考价值。试卷按填空、判断、选择、简答、综合题五大题型组织附有完整参考答案题目涉及数据库管理系统的六大功能、SQL语言的特点、数据完整性保护、倒排文件查找、E-R图设计等典型问题还包含SQL查询语句编写和学生-课程数据库的E-R图设计例题能有效帮助读者检验对数据库原理与应用的掌握程度巩固课堂所学。1. 一套期末考试卷子比背书更值得做三遍试卷算得上数据库系统概论的知识点压缩包填空20分覆盖实体联系类型、关系模型、QBE、数据依赖SQL综合题把连接查询、范围查询、等值连接在10分里全部考到从2级封锁协议到倒排索引再到面向对象数据库每个空都在检验你是不是真正理解了而不是记了定义。这套卷子适合两类人一类是考前一周拿它做查漏清单另一类是准备面试时拿它当基础题底册。我的做法是把答案做成索引每道题对应教材章节错题就是你的薄弱页。这比抱着书重头看效率高得多。2. 实体联系、关系模型与关系代数把试卷填空题变成知识索引2.1 三张基础表决定了后面所有题试卷填空题第一题考的实体联系按照联系方式分为一对一(1∶1)、一对多(1∶n)、多对多(m∶n)这道题在《数据库系统概论》里属于概念层的内容但在实际建模时它直接决定你E-R图里线怎么画、联系怎么落。综合题第二题就是让学生与课程画m:n联系中间实体学习(学号课程号成绩)把多对多拆成两个一对多这是规范化思想在概念设计阶段的提前应用也是后续设计关系模式时避免冗余的第一道闸门。第二空数据库系统的核心是数据库管理系统以及第三空关系模型中实体和联系都用关系(二维表)表示这两题连在一起看很有意思。关系模型的一个核心主张就是数据结构单一化——实体是表联系也是表SC表承载的就是学生和课程之间的选修联系。相比网状模型要用指针表达联系关系模型用数据本身说话这也是它最终胜出的原因。备考时不光要记住答案还要能回答为什么联系也用表表示因为这是关系模型区别于层次、网状模型最根本的设计决策。2.2 关系代数里的选择、投影、连接与除2.2.1 专门运算的作用范围关系代数中专门的关系运算包括选择、投影、连接、除。注意这里的用词是专门的关系运算区别于并、交、差这些传统的集合运算。专门运算的操作对象是关系操作结果仍然是关系这是关系代数的闭包性质。选择题第二题考的关系演算的基础是数理逻辑中的谓词演算这里要区分关系代数(集合并交差选择投影连接除)和关系演算(元组关系演算、域关系演算)两条技术路线。2.2.2 QBE与域关系演算的关联填空第五题1975年IBM公司的M.Zloof提出的QBE语言是一个很有特色的域关系演算语言。QBE(Query By Example)的特色是面向用户、以表格形式填写查询条件属于域关系演算的典型代表。这里有个容易混淆的点关系演算分为元组关系演算和域关系演算ALPHA语言属于元组关系演算QBE属于域关系演算。如果只是背答案一旦换一种问法ALPHA语言属于哪种演算就又不会了。2.3 判断题里藏着的存储与索引细节判断题第一题考IMS系统的HSAM存储结构答案是检索方便但插入删除不方便所以打×。HSAM是层次顺序存取方法数据按层次顺序物理连续存放检索可以用顺序扫描加指针快速定位但插入和删除需要移动大量数据。这个知识点看起来冷门但对应的是文件组织和存储结构的基础原理。判断题第九题在向量结构的顺序文件中插入记录比较困难打√。向量结构指记录定长、按序连续存放插入点在中间时需要整体后移。这个知识点可以联系实际数据库中的页分裂——B树索引插入导致页分裂时要移动部分记录代价高是共通的。复习到文件结构时把堆文件、顺序文件、索引文件三种组织方式的插入、删除、检索成本列一个对比表这一类的判断题就不会再错。文件组织方式检索插入删除堆文件全表扫描末尾追加代价低定位后删除可能有空洞顺序文件按关键字二分查找需移动记录代价高需移动记录代价高索引文件通过索引定位索引维护有额外开销索引维护有额外开销这个表建议自己画一遍比单纯背HSAM的结论更稳因为判断题变着法考的就是这张表的逻辑。3. SQL四种能力与综合题SQL从三条语句延伸到实际写法3.1 SQL综合统一的设计思想填空题第六题SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体。简答题第二题又要求阐述SQL的特点综合统一是第一个特点。这四个功能对应四类语句数据查询SELECT、数据操纵INSERT/UPDATE/DELETE、数据定义CREATE/ALTER/DROP、数据控制GRANT/REVOKE。采用同一种语法结构提供交互式和嵌入式两种使用方式是SQL能成为关系数据库标准语言的重要原因——应用程序里嵌的SQL和命令行里敲的SQL基本一样降低了从DBA到开发者的迁移成本。3.2 综合题的三条查询语句拆解试卷综合题第一题给出Student、Course、SC三张表要求写三条SQL。第一条查询年龄在20岁以下的学生姓名与年龄-- 查询所有年龄在 20 岁以下的学生姓名与年龄 SELECT Sname, Sage FROM Student WHERE Sage 20;很多人在这个题上出错的地方是20岁以下到底包不包括20岁。标准答案是Sage20因为以下在中文里语义有歧义但数据库教材里的惯例是按数学含义处理小于20就是小于20不包括等于。如果题目写20岁及以下才用。我这里习惯先确认条件边界再写防止把not和混用。第二条查询年龄不在2023之间(包括20和23)的学生姓名、系别和年龄-- 查询年龄不在 2023 之间含边界的学生的姓名、系别和年龄 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;NOT BETWEEN的语义是不在区间内BETWEEN 20 AND 23在SQL标准中包含两个端点值。等价写法是Sage20 OR Sage23。这里要提醒的是如果改用NOT(Sage20 AND Sage23)逻辑上相同但可读性明显更差。实际开发时我倾向用NOT BETWEEN因为它在执行计划里通常能被优化器识别为范围条件配合索引可以走Index Seek而不是全表扫描。第三条要求查询每个学生及其选修课程的情况-- 查询每个学生及其选修课程的情况隐式等值连接 SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno SC.Sno;这是一道经典的等值连接题。Student与SC通过Sno关联结果集包含两表所有列。注意这里有个查询意图的坑题目说每个学生及其选修课程的情况有些同学会加LEFT JOIN去保留没选课的学生但教材标准答案是内连接写法因为SC表中存在的记录才表示选过课。不过在实际业务里每个学生这个表述确实会产生歧义如果需求是没选课的学生也要显示就必须改成-- 保留未选课学生的左外连接写法 SELECT Student.*, SC.* FROM Student LEFT JOIN SC ON Student.Sno SC.Sno;对比两种写法可以看到内连接丢弃没有匹配行的学生记录左外连接把未选课学生保留下来且SC列填NULL。我一般会提醒读者做题时先看题目语义再决定连接类型不要看到每个所有就条件反射用外连接。代码逻辑说明SELECT后同时出现Student.和SC.表示把两张表的全部列都取出如果两表有同名列这里恰好没有同名列因为SC用了Sno/Cno/Grade使用表名前缀限定是必须的。3.3 从试卷SQL到参数化查询的进阶试卷只会考静态的SELECT但实际工程里写SQL的第一个原则就是参数化比如在Java的JDBC或Python的psycopg2里用占位符而不是字符串拼接# Python 中使用参数化查询避免 SQL 注入 import sqlite3 conn sqlite3.connect(student_course.db) cur conn.cursor() min_age 20 cur.execute( SELECT Sname, Sage FROM Student WHERE Sage ?, (min_age,) ) rows cur.fetchall()这里的?是占位符参数以元组形式传入数据库驱动会处理转义而不是把min_age直接拼进SQL字符串。这样做一方面防止SQL注入另一方面让数据库能复用执行计划。如果使用字符串格式化去拼条件比如fSELECT ... WHERE Sage {min_age}每次参数变化都可能触发重新解析还有注入风险。这与试卷第三条连接查询的考点其实是一体两面——先想清楚结果集的语义再决定语句结构。3.4 SQL特点在简答题中的组织方式简答题第二题简述SQL语言的特点是高频考题标准答案框架是五条综合统一、高度非过程化、面向集合的操作方式、同一种语法结构提供两种使用方式、语言简洁易学易用。对我来说这五条可以压缩成记忆锚点一个语言干了四件事不关心过程只管集合写法统一还简单。非过程化是SQL区别于第三代编程语言最核心的特性——你告诉数据库要什么数据通过什么路径取数据由优化器决定。这一点在回答SQL与高级语言的区别这类扩展题目时同样适用。4. 函数依赖、范式与数据库设计从3NF到BCNF的消歧与实战定位4.1 主属性对码的部分依赖与传递依赖填空题第九题关系模式由3NF转化为BCNF是消除了主属性对码的部分函数依赖和传递函数依赖。这个答案需要仔细辨析因为3NF的定义本身就涉及非主属性对码的依赖消除。具体来说从2NF到3NF消除的是非主属性对码的部分函数依赖和传递函数依赖从3NF到BCNF则更进一步消除主属性对码的部分依赖和传递依赖。为了直观理解两级规范化的差异我用一个选课场景来说明。设关系模式R(学号课程号系别)主码是(学号课程号)。如果系别只由学号决定那么存在部分函数依赖学号→系别R只达到1NF将其分解为R1(学号系别)和R2(学号课程号)后消除部分依赖达到2NF。这是从1NF到2NF的路径。再从2NF推到3NF考虑关系模式S(学号系别系主任)学号→系别系别→系主任于是存在传递依赖学号→系主任将其分解为S1(学号系别)和S2(系别系主任)消除传递依赖达到3NF。到了3NF后如果候选码不止一个可能仍有主属性对码的部分依赖例如关系模式T(学生课程教师)中约束为一个学生选一门课只对应一个教师一个教师可以教多门课候选码是(学生课程)和(学生教师)此时主属性教师对候选码(学生课程)存在部分依赖T虽然是3NF却不满足BCNF需要进一步分解。4.2 分解保持函数依赖与3NF目标的对应关系选择题第三题若要求分解保持函数依赖那么模式分解一定能够达到3NF。这个问题的陷阱在于BCNF分解不一定能保持函数依赖而3NF分解总能做到。所以当题目强调保持函数依赖时正确答案是3NF而不是BCNF。如果去掉保持函数依赖这个前提问模式分解能够达到的最高范式那么答案可以是BCNF甚至4NF但4NF分解会牺牲函数依赖保持性。这个考点建议当成结论直接记但背后逻辑需要理解BCNF的分解算法基于函数依赖闭包做投影可能把一个依赖拆分到多个关系里导致依赖丢失而3NF的合成算法通过规范化覆盖每个函数依赖的左边确保依赖保留。对于数据库设计选择经验法则是通常设计到3NF或BCNF即可BCNF在数据冗余控制上更强但分解后查询需要更多连接操作。实际业务里如果发现因为过度分解导致查询性能问题很多团队会反规范化到2NF级别并依靠应用层保证一致性这种取舍在《数据库系统概论》第六版的扩展阅读里有讨论考试不会考但工作里常见。4.3 数据字典的建立时机选择题第五题建立数据字典的时机是需求分析阶段。数据字典是数据流图的配套产物包含数据项、数据结构、数据流、数据存储和处理过程五类条目在需求分析阶段随数据流图逐步形成。它是下一步概念结构设计的基础素材如果在概念设计阶段才开始收集数据字典等于需求分析的输入还没有固化就开始画E-R图后面大概率返工。开发阶段主要产出数据字典的作用需求分析数据流图、数据字典、需求说明书定义数据项与数据流的结构概念结构设计E-R图从数据字典提取实体与属性逻辑结构设计关系模式将E-R图转换为关系并规范化物理设计存储结构与存取方法依据数据量选择索引与分区策略这套流程对应简答题第三题什么是数据库系统里提到的数据库设计应包括结构设计和行为设计。结构设计指概念模式、逻辑模式、内模式的分层设计行为设计指应用程序对数据的操作设计。数据字典在需求分析阶段就介入正是因为结构设计的起点是数据需求而不是表结构。4.4 完整性保护与安全性访问控制判断题第八题概念级对应于它实际存储的数据打×概念级(模式)是数据库中全体数据的逻辑结构和特征的描述实际存储的数据对应内模式。而填空题第十一题数据库管理系统保证数据安全的主要措施是进行存取控制注意不能写成加密做主答案教材标准答案是存取控制。加密属于辅助手段第一道防线是存取控制通过GRANT/REVOKE授权来控制不同用户对数据的访问权限。简答题第四题试述数据库完整保护的主要任务和措施的答案组织方式任务部分答保障数据的正确性、有效性、协调性提高数据对用户的可用性措施部分三条适时检查完整约束条件保证语义完整控制并发操作不破坏完整性系统故障后即时恢复。我补充一点容易被忽略的细节完整约束的检查时机分为立即执行约束和延迟执行约束事务的每个维护操作执行后立即检查属于前者判断题第五题说总是在事务的每个维护操作执行后立即进行打×因为还有延迟约束的场景比如触发器里的DEFERRABLE约束可以到事务提交时才检查。5. 封锁协议与倒排索引两个常被忽略却反复考的进阶点5.1 二级封锁协议区别于一级和三级的检查点选择题第四题1级封锁协议加上T要读取的数据R加S锁是2级封锁协议。要理解这条题先把三级封锁协议的差异表列出来封锁协议操作规则解决的问题1级写数据前加X锁事务结束释放丢失修改2级1级基础上读数据前加S锁读完释放丢失修改、读脏数据3级1级基础上读数据前加S锁事务结束释放丢失修改、读脏数据、不可重复读二级与三级的关键区别在S锁的释放时机二级在读完立即释放所以两个事务可以在同一事务未提交前交替读取同一数据三级把S锁保持到事务结束防止其他事务在此期间修改数据从而避免不可重复读。注意二级协议没有完全解决不可重复读和幻读的问题如果需要严格可串行化用三级协议或加范围锁。实际数据库的隔离级别与封锁协议的对应关系可以单独整理但对付这类选择题抓住S锁释放时机这一个变量就够了。5.2 倒排文件部分辅索引查找的交集策略简答题第五题在倒排文件中如果只建立了部分关键字的辅索引如何进行查找。标准答案分两步先对询问中涉及的关键字在已建立的辅索引中求指针交集P然后对P所指记录逐个验证其他未建索引的关键字是否匹配所有匹配记录即查询结果。这本质上是最小候选集策略。以图书检索为例假如建立辅索引的关键字有数据库和系统查询条件是数据库与系统概论且概论没有辅索引第一步先在两个辅索引中取文档指针交集得到一个候选文档集合数量远小于全表第二步再逐条检查候选文档的概论字段最终得到结果集。这个思路与数据库查询优化里的过滤顺序一致先走索引缩小扫描范围再用谓词过滤剩余行。理解为先用代价最低的路径缩小候选集再在候选集上做精确匹配比死记两句话更有效因为题目如果改问为什么先求交集而不是先验证答案也呼之欲出——避免对海量无关记录做逐条访问。5.3 用这套试卷做一次自测的验证方法复习收尾时可以把试卷当作检查清单限时60分钟完成重点看三类错误填空题暴露的是概念精确度比如函数依赖那题写完全函数依赖还是部分函数依赖判断题暴露的是边界条件比如总是这类绝对化表述往往是错的综合题暴露的是SQL语义掌握程度尤其是连接类型的选择。每错一题回到教材对应章节做10道同类题巩固。同一套题隔三天做第二遍错误率明显下降说明知识点已经内化可以进入下一轮学习。本文还有配套的精品资源点击获取
返回列表