周烜给24考研学生划重点
zx给24考研学生划重点¶
2023年10月27日
文档数据库和关系数据库
文档数据库不考的,那部分不用着重去看,主要的内容还是关系数据库,这个和考纲是紧密结合的
关系数据库的话可以分成3个层面:1关系数据库的使用(最开始学的是关系模型、关系代数【选择,投影,连接】,会用关系代数的表达式来做查询,然后学会用SQL语句进行基础的查询【单表查询,多表,聚集(group by,having),嵌套】嵌套查询有时可以用多表查询来替代,但是有时使用嵌套查询更方便一些,因为所有的需求都可以一步步地套出来)(SQL的查询很重要,任何考试,期中期末都会考,给你一个要求,给表格的设计,然后提问需求让你来找xxx。面对很复杂的查询怎么办呢?一步一步来,利用嵌套可能好一些,基于第x步的查询结果进行第x+1步的查询) (关系代数也是考察的重点)(这里面可能会有一些DDL定义,DML操纵,因为SQL只是查询)(DDL一般比较简单,但是要注意定义时候加的一些约束,注意 主键和外键)2数据库设计(这个是重点,从概念设计开始)(概念设计-结构设计-物理设计)【概念设计学会用ER图把想要存的数据给画出来(比如人和商品之间有什么关系,ER图里面可能有些复杂些的,有些东西他应该是实体,有些东西是联系,什么时候用实体什么时候用联系来刻画这是一个重点。联系信息是由实体的id构成的,如果实体的id不能唯一识别联系的信息,严格意义就不能形成一个联系,而是一个实体。这里他还举了个购物的例子,略。题型:应用的需求给你了,你应该存什么样的信息?这些信息如何用ER图来刻画出来?);ER图直接可以转换到关系模式,甚至可以在此添加一些冗余信息,就形成了关系的结构设计;然后就要建索引,什么属性上应该建索引?索引是如何用的?这就是物理设计的内容(索引不仅在选择时候可以用,连接时候也可以用,但连接情况下什么时候用是比较合适的?性别上要不要建索引?no!)】数据库的设计除了这3个设计之外,还讲了事务设计,事务是什么?它通常就是一个Begin Transaction/Commit/Abort
事务怎么用的?保证原子性;中断之后不会影响;还会数据修改维持正确性。事务的概念是需要理解的,事务要尽可能变得短小,这个要注意,别搞冗长的事务,因为事务是要加锁的,这个也要详细理解。
3数据库实现原理。首先,数据是怎么存的,存储的结构是什么?存在硬盘上一块一块按页存?为什么要按页存?页的大小多大是合适的?这些页是怎么被串连起来的?存下来之后如何访问?系统有一个缓存,缓存机制。有一个重要的环节是索引,B+ Tree,把页存下来怎么扫描一张表?索引是怎么工作的?
其次,SQL语句到来之后,怎样进行查询?查询过程。翻译成查询计划,优化(选择一个代价最低的查询计划),执行(我们主要讲的是每一个关系代数的算子是如何执行的——选择(直接扫描一遍过滤/索引有针对性地找),投影(确定一个投影没有什么(没听清)的话,把表扫描一遍不要的列去掉就行了;但有时候要有去重的操作 ,去重过程中分为I/O优先的外部排序算法)连接(多种连接表达,比如嵌套、循环;比如Hash Join、散列;比如排序合并、sortMerge;比如索引连接)连接算子最复杂了,大家要明确代价和原理。这里他举了几个例子,R表S表不同情况下各种连接应该怎么搞。代价还有组合代价分析,比如先做选择还是先连接更合适?)
最后,就是事务处理。前面都在讲怎么用,事务处理讲的是如何实现?两个机制——第一个是undo/redo日志,checkpoint检查点(要明白实现原理,checkpoint是干嘛用的)这个是用来保证事务应对故障的原子性、持久性等;第二个就是锁的机制,特别是2PL和可串行化的概念,这属于并发控制方法。可串行化的目的是什么?
答题最好分点答,特别是设计题。