Introduction to database
Chapter1 数据库系统概论
什么是数据:计算机能够处理的信息
DBS = DB + DBMS + 计算机系统
数据库的三级模式&两级映像
- Internal Scheme:物理模式。描述数据的物理结构/存储方式。 由DBMS提供,每个数据库只有一种,通常不需要客户来关心如何实现。
- Scheme:逻辑模式。所有用户的公共数据视图,描述数据的逻辑结构。
- 这里需要了解DBMS中的三种语言:DD^Definition^L, DM^Manipulation^L, DC^Control^L
- 其中DML 控制增删查改, DCL负责数据完整性和安全性
- DDL描述逻辑模式,定义数据的各类label
- 是全体数据的逻辑结构,一个数据库只有一个模式。
- External Scheme:是模式的子集或者某种变形,依用户/应用的要求而定。
- 每个数据库可以有很多个外模式
- 两级映像 实现了三种模式的转换,保证数据库系统的逻辑独立和物理独立性
- 以外模式/模式映像为例,简单来说,当
模式
改变时,只需要改变映像
即可, 而不需要改变外模式, 从而保证了数据的逻辑独立性。 - 同理,如果内模式改变(比如用了更先进的数据结构),只需要修改模式/内模式映像,就可以让模式适应新的内模式。
- 以外模式/模式映像为例,简单来说,当
模型
- UML Unified Modeling Language: 分为功能模型,对象模型和动态模型。
- UML定义一个 面向对象的软件密集型系统的方法
- 数据模型 = 数据结构 + 数据操作 + 数据完整性约束
- 关系模型 是关系数据库采用的模型,很多其他模型是用图解来说明的,而关系模型则是使用 二维表格来表达实体和它们间的关系,也是我们接下来主要研究的模型,其应用是最广泛的。
- 概念模型的几大概念: 概念模型用来描述概念和它们之间的关系
- 属性 => 实体的某一特性; 域 => 属性的取值范围;码(key) => 可以唯一标识一个实体的属性
- E-R图表示概念模型 其中矩形为实体,椭圆为属性,菱形为联系,用无向边+菱形联系起两个实体,并在无向边上标识 1:1 或是1:n 或是m:n。 在每个实体的码下面划一条横线
- UML Unified Modeling Language: 分为功能模型,对象模型和动态模型。
Chapter2 关系运算理论
- 不同域之间的笛卡尔积
- 比如D1 {计算机系,日语系}; D2 {1班,2班}; D3 {张三,李四,王五}
- 三者相互组合,形如
(计算机系,1班,张三)
被我们看作一个元组
(在实际的表格里,这就是一行), 3个域的笛卡尔积能形成 2 * 2 * 3共 12个元组,整个笛卡尔积则是 3(3个域) * 12(12个元组) 的表格。 应当注意的是,实际上的关系,则是取整个笛卡尔积中有效的部分
- 关系的性质
- 一行为一个元组,一列称为一个属性
- 码「唯一标识一个元组」 :
- Candidate Key 候选码 : 可以唯一标识一个元组的属性 (比如 学号属性可以唯一标识出学生)
- All Key 如果说所有的属性才可以唯一的标识一个元组(极端情况),那么这些属性组 合起来称为全码
- Primary Key 主码:和全码的意义差不多相反,如果有很多个属性都可以唯一的标识一个元组(也就是有多个候选码),那么选定其中的一个属性作为主码。
- 外码: 如果F是R中的一个属性,但不是R的码, 但在另外一种关系中确是其码
- 在关系数据库中,行(列)的次序是可以任意更换的, 并且每个分量都是不可分的数据项
- 关系完整性 「实体完整性、用户定义完整性、参照完整性」
- 实际上就是对关系的某种约束
- 实体完整性=> 不可以出现主键相同或者空值
- 用户完整性=> 我们自己给关系设置约束,比如学生成绩在0~100之间
- 参照完整性=> 两个表互为参照的话,对一个表的修改要反映到另一张表里,你也不能在主表之外的值里取值
- 关系的五种基本操作 「选择 投影 并 差 笛卡尔积」
Chapter3 结构化查询语言SQL(关系数据库标准语言)
其特性包括以下几条
- 综合统一 「定义、操纵、查询、控制」 一种语言就可以完成数据库生命周期中的全部活动
- 高度非过程化 用户指出要做什么,但不必指出如何做.
- 面向集合操作
- 非关系数据模型是面向记录的操作方式, 而SQL语言可以一次操作很多个元组
- 同一种语法结构提供两种使用方式 SQL是一种嵌入式语言, 可以嵌入其他高级语言中用
几个概念:
设计关系数据库时, 遵从不同规范要求以设计出合理的数据库, 这些要求被称为
范式
, 范式越高,数据库的冗余越小, 但可能提升计算的复杂度因此范式并不是越高越好 后续的范式必须先满足前面的范式. 去除冗余数据的过程, 就可称为规范化三个范式 : 属性唯一, 记录唯一, 表唯一
- 1NF: 确保每一列的原子性
- 2NF: 非键字段必须依赖于键字段, 相当于每个表只描述了一件事, 任何属性都最多只能和主键相关
- 3NF: 非主键之间也要消除依赖. 比如说学号和姓名 想满足3NF时 只能保留一个 (任何属性之间要无关)
完整性约束
- 完整性 = 正确性 + 相容性(同一对象在不同关系表中的数据是符合逻辑的)
索引查询是不是一定提高查询性能 ?
- 通常来说 利用索引更快, 不过索引需要额外的空间,并且进行修改后 也有额外的维护成本
什么是事物: 用户定义的一系列数据库操作, 它们要不全做, 要么全不做 有原子性
封锁协议(用来维护数据完整性)
- 一级封锁 : 先🔒 后修改
- 二级封锁: 读时也🔒, 这样可以避免 读脏数据或者丢失修改
- 三级封锁: 读也不可并行, 不能重复读
- 两段锁协议: 任何数据进行读/写前, 先获得锁, 在释放一个锁后, 事务不再申请和获得任何其他锁
数据库面试大纲
第一章 数据库系统概述
1、四个概念:什么是数据? 什么是数据库? 什么是数据库管理系统(DBMS)?什么是数据库系统(DBS)?
2、熟记数据库系统的组成。
3、理解DBA是对数据库进行集中控制和管理的最重要人员。
4、实例和模式的对比(内容/状态 vs 结构,变化 vs 稳定)
5、三级模式:物理模式(又称内模式、存储模式),逻辑模式(又称模式),和子模式(又称外模式)的含义是什么?一个数据库有几个物理模式,逻辑模式和子模式? 三级模式间的两极映射,以及是由谁(DMBS)完成这种映射功能的?两级映射的作用(好处)是带来以下两种数据独立性——
6、两种数据独立性:什么是逻辑数据独立性?什么是物理数据独立性?用户或者应用程序面向的到底是哪一级数据库模式?
7、概念数据模型用于数据库设计,是对客观世界的第一层抽象。常见例子是E-R模型。
第二章 关系模型与关系运算
1、数据模型的三要素?关系模型的三要素?
2、关系的组成:什么是属性?什么是元组?什么是分量? 度和基数。
3、理解关系有哪些性质?
4、理解关系的四种键及定义?数量(上限下限)?外部键的属性名可以和所对应的主键不同。外部键可以指向同一个关系的主键。例如:学生(学号,姓名,班长学号…)。外部键从E-R图的什么概念转化而来?
5、关系模式和关系实例的对比。
6、过程化和非过程化语言的区分和理解——看课件。
7、关系操作分为查询和更新操作。表示关系操作用某种查询语言:关系代数,关系演算(又分为元组关系演算和域关系演算)。关系代数是过程化的,关系演算是非过程化的。后面讲到的SQL是非过程化的。
8、掌握关系代数的各种运算(包括符号)。其中最基本的运算(不可替代)是哪些?
9、应用题型:用关系代数表达查询问题
第三章 关系数据库语言SQL
1、SQL的全名(中英文)。SQL是非过程化的语言。理解SQL的特点(基本功能特征)。
2、熟记SQL的四种功能。这些功能分别由哪些语句(动词)实现?
3、SQL对数据库三级模式的规定:每级模式由什么组成?
4、理解SQL中的系统数据类型,char/varchar/numeric等。
5、掌握SQL的各个数据定义语句(特别是新建表,建视图,修改表,删除表的语句)。
6、掌握SQL的Select数据查询语句。
7、掌握SQL的各个数据修改语句: Insert, Update, Delete。
8、空值的意义;掌握空值的运算规则(包括聚集函数忽略空值等),例如给出一个包含空值的式子,能计算最终结果。
9、理解视图的本质:命名的查询语句,只有这个才是真正存储在数据库里的;表象:虚拟表,与真正的表基本表相比有相同也有不同;动态变化)。
10、熟记视图的优点。
11、掌握定义视图的语句。理解对视图的查询以及对视图的更新系统在后台是怎样执行的(视图的查询:展开视图——替换视图为它所对应的查询。视图的修改:转化为对基本表的修改,这种转化可能因为缺少主键等原因失败,从而无法修改)。
12、嵌入式SQL不要求。
13、应用题型:用SQL表达数据查询(Select)和数据修改(Insert, Update, Delete)问题。用SQL建表(Create Table),建视图(Create View)等数据定义操作。
第四章 关系数据库模式设计
1、熟记关系模式设计不当可能产生的四种问题:数据冗余和三种异常。
2、理解函数依赖的概念。三对特殊类型的函数依赖:平凡/非平凡,部分/完全,传递/非传递。根据定义去理解和判定它们。
3、用函数依赖判断一个属性集是否超键,或者是否候选键的方法。
4、掌握计算属性集闭包的算法。以及由此判定一个函数依赖是否成立的方法。
5、掌握1NF、2NF、3NF、BCNF。并能够进行判定。
6、掌握规范化到1NF,3NF,BCNF的相关方法。关系模式应该至少规范化到3NF。规范化到3NF和规范化到BCNF相比,后者得到的关系模式属于更高级别,但是可能会丢失函数依赖。
7、应用题型:给出关系和函数依赖
a)寻找全部(可能不只一个)候选键,并给出判定证明。
b)判断某个函数依赖是否成立?
c)判断关系所属的最高范式,并给出证明。
d)将关系规范化到3NF,或者BCNF
e)判定一个分解(比如规范化后的结果)是否无损连接分解。
第五章 数据库设计
1、理解E-R模型的三要素:实体、属性和联系。以及在E-R图中的表示。
2、能判断二元联系的类型:一对一,一对多,多对多。以及在E-R图中的表示。
3、能将E-R图转化为关系模型。注意:多值属性的处理;1对1,1对多,多对1,多对多,三元以上联系各自的转化方式——不要张冠李戴。
4、熟记数据库设计的基本过程,包括在各个阶段分别要做的工作?
5、应用题型1:画E-R图(概念设计)。
6、应用题型2:将E-R图转化为关系模型(逻辑设计)。
第六章 数据库安全性与完整性
1、安全性是防止非法用户进入数据库,以及合法用户进入数据库后做了(未授权的)非法操作。完整性是防止非法数据进入数据库,即使是合法用户使用合法操作产生的。
2、掌握用SQL授予权限和回收、禁止权限的语句(grant, revoke, deny)。with grant option子句的作用。
3、理解常见权限的含义。(例如 insert on table S, update on view A等)
4、理解完整性的含义:正确、有效、相容。完整性约束(规则)是数据为保证完整性所必须满足的条件。
5、熟记关系模型中的三类完整性规则。各有什么要求?理解哪些(修改)操作会破坏这些规则?
6、掌握用SQL定义主键约束、外键约束、非空(not null)约束、唯一(unique)约束、域约束、检查(check)约束的语句?以及这些约束的含义、作用。
7、在定义外部键约束时,有哪几种参照动作?代表什么意义?
8、触发器是一种ECA规则,构成:Event事件,Condition条件,Action动作。触发器的事件主要有三类:INSERT,UPDATE,DELETE。
第七章 数据库事务管理。
1、深刻理解事务的概念。熟记事务的ACID性质(包括英文单词、解释、实现机制)。
2、掌握事务控制的多个SQL语句。两种结束方式(提交或回滚)的含义及区别。
3、熟记并发引起的三类数据不一致问题,它们是如何发生的(过程?)。产生不一致问题的根本原因是事务在并发执行(调度)时,没有保证隔离性。
4、并发执行(调度)的正确性准则:可串行化——效果等价于一个串行调度。
5、并发控制的任务:保证事务的并发执行(调度)是(尽量)正确的,避免不一致问题的产生。常见的一种实现方法是封锁。
6、封锁的基本类型:排他锁(写锁、X锁)、共享锁(读锁、S锁)。它们的相容关系?
7、有哪几种封锁协议?规则是什么?可分别解决哪些数据不一致性问题?两段封锁协议是可串行化调度的充分非必要条件。
8、数据库恢复技术的基本原理:冗余。建立冗余的两种方法:数据备份和登记日志文件。
9、静态备份 vs 动态备份(有否一致性;数据库是否可用,即是否允许用户运行事务来操作数据库)。完全备份 vs 增量备份(优缺点对比)。
10、日志文件:是用来记录事务对数据库进行修改操作的文件
11、日志文件的基本内容(事务开始一条;事务结束一条;事务若干次更新若干条)。在登记修改操作的日志记录时,修改前后的旧值与新值都要保存到日志记录中。
12、什么是运行记录优先(先写日志)原则?
13、熟记不同类型的数据库故障,包括它们的定义,故障的起因(例如死锁引起事务故障,停电引起系统故障,硬盘坏道引起介质故障等等…),影响范围(事务本身?DBMS系统?内存中的数据?磁盘上的数据?)、恢复策略(方法过程),每种故障类型的恢复过程,及由谁完成(系统自动 or 用户干预?)
14、理解检查点机制的原理(写检查点做了什么工作?按相对检查点的位置,把事务分成几类,哪些需要REDO/UNDO,哪些不需要?)。检查点的作用(在恢复系统故障时,大大缩短需要扫描的日志文件的范围,这个范围是从哪里到哪里…)
15、熟记引入检查点后,系统故障的恢复过程,并与之前没有检查点时的恢复过程作对比