第一章 绪论
1. 数据模型
逻辑模型:包括层次模型、网状模型和关系模型等,按计算机系统的观点对数据建模,主要用于数据库管理系统的实现;
物理模型:对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
(1)层次模型:有且只有一个结点没有双亲结点,即根结点; 根以外的其他结点有且只有一个双亲结点。优点是数据结构简单清晰,查询效率高。缺点是现实世界中很多联系是非层次的。应用程序编写复杂,查询子结点必须通过双亲结点,层次命令趋于程序化。
(2)网状模型:允许一个以上的结点无双亲;一个结点可以有多余一个的双亲。优点是能够更为直接的描述现实世界,存取效率较高。缺点是结构复杂, DDL、DML复杂,用户必须了解系统结构的细节,编写应用程序负担大。
(3)关系模型:概念单一、存储路径对用户透明、数据独立性强但查询效率较低、开发难度较大。
2. 模式和实例
(1)模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型的描述,而不涉及具体的值。模式的一个具体值称为模式的一个实例。
(2)数据库模式相对稳定,很少需要修改。实例是对应模式的一个具体值,反映的是某一时刻数据库的状态。一个模式可以有很多实例,实例的值随数据库中数据的更新而不断变化。
3. 数据抽象的层次
(1)物理独立性:如果数据库的内模式改变,只要对模式/内模式映射做相应修改,模式保持不变,称为数据物理独立性
(2)逻辑独立性:当模式改变时,对各外模式/模式映射作相应的改变,外模式保持不变,称为数据逻辑独立性。
(1)外模式:是数据库用户的数据视图。外模式通常是(逻辑 )模式的子集,因此有多个外模式。
(2)(逻辑)模式:数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图。一个数据库只有一个模式。
(3)内模式:也称存储模式,一个数据库只有一个内模式,是数据结构和存储方式的描述,是数据在数据库内部的组织方式。
4. DBMS
三种基本语言:程序定义语言(DDL),程序操作语言(DML),程序保护语言(DPL).
5. 索引
索引,在 MySQL 也称为键 (Key),是 存储引擎 快速找到记录的一种 数据结构。相当于图书的目录,可根据目录中的页码快速找到所需的内容。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。
第一,通过创建唯一性的索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也使创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面。
第四,在使用分组和排序子句进行数据检索时,同样可以显著的减少查询中查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
第一,创建索引和维护索引需要消耗时间,这种时间随着数量的增加而增加
第二,索引需要占物理空间,除了数据表占据数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要额空间就会更大。
第三,当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
在经常用于连接的列上,这些列主要是一些外键,可以加快连接的速度。
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
在经常使用在where子句中的列上面创建索引,加快条件的判断速度。
对于那些只有很少数据值的列也不应该增加索引(比如性别,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度)。
对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
当修改性能远远大于检索性能时,不应该创建索引,因为修改性能和检索性能是矛盾的。
对于 BLOB、TEXT 和 VARCHAR 类型的列,必须使用前缀索引,只索引开始的部分字符,这样能够节省大量索引空间。前缀长度的选取需要根据索引选择性来确定。
唯一性索引保证在索引列中的全部数据是唯一的,不会包含冗余数据。
复合索引就是一个索引创建在两个列或者多个列上,可以减少一在一个表中所创建的索引数量。
对于 非常小的表:大部分情况下简单的 全表扫描 比建立索引更高效;
对于 特大型的表:建立和维护索引的代价将会随之增长。这种情况下,需要用到一种技术可以直接区分出需要查询的一组数据,而不是一条记录一条记录地匹配。例如可以使用 分区技术。
第二章 关系模型
关系:是关系模式在某一时刻的状态,关系是动态的、不稳定的,随时间变化而变化。
关系数据库:是建立在关系模式的基础上,利用关系来描述现实世界。
1. 关系键
主键:一个关系中可能有多个候选键,通常指定其中一个,并且只能是一个,用来表示元组,该候选键称为主键。
外键:关系表S1的一个属性子集A,必须匹配另外一个关系表S2中出现的数值,则该A是关系表S1外键。S1称为引用关系,S2称为被引用关系。外键的值,或与被引用关系中出现的数值对应,或为空值。
第三章 数据定义与操作
1. 关系数据库语言
关系数据库的标准语言是SQL(Structured Query Language),即结构化查询语言,简称SQL.
掌握SQL四条最基本的数据操作语句:Insert, Delete, Update, Select,即增删改查
2. 表的增删改查
第四章 应用
C/S结构:即客户机/服务器结构。服务器主要用数据库管理系统来管理数据,而客户机则负责应用逻辑与用户界面;客户机需要时想服务器发出数据或服务请求,服务器响应这些请求并把结果或状态信息返回给客户机。即C/S体系结构需要在客户机上安装特定的专用软件才能访问服务器。
B/S:即浏览器/服务器结构。客户机不需要安装任何特定的软件,只需要有一个浏览器就可以与服务器进行交互。
第五章 数据保护
1. 数据库系统的安全
保密性:仅允许经授权地读数据,分为数据值的保密、数据存在性的保密
2. 完整性约束
软件系统无法保证数据的真实正确性,但可以保证数据符合可明确定义的约束,即完整性约束。
外键约束:声明一个字段(或一组字段)的数值必须匹配另外一个表中出现的数值。
非空约束:每个元组对应列值不能为空,将一个或几个属性声明为非空后,系统会阻止相应属性值为空的数据输入和更新。
唯一值约束:相应的属性(或属性组)为候选键。将一个表的一个或几个属性声明为唯一值约束(候选键)后,系统自动检查是否违背唯一值约束。除非同时显示定义为非空,候选键的属性可以为空值。
CHECK约束:CHECK(P) 子句指定一个谓词P,关系中的每一个元组都必须满足谓词P.
约束的命名:给约束取一个独立的名字,并通过这个名字在需要时对约束进行修改
参照完整性:外键属性的取值要么为空,要么是主键属性域中的值。
用户自定义完整性:用户定义的属性取值必须在自己定义的范围和域内。
3. 视图
视图和表都是关系,都可在查询中直接应用。数据库存储表的模式定义和数据,但是只存储视图的定义,不存储视图的数据。视图数据在使用视图时临时计算。
虚表,是从一个或几个基本表(或视图)导出的表;只存放视图的定义,不存放视图对应的数据。
4. 触发器
5. 事务
数据库管理系统以事务为单位执行操作。事务是一系列数据操作的集合,要么通过commit一起成功,要么通过rollback一起回滚,具有ACID性质。
(1)原子性(Atomicity):事务中包含的所有操作要么都做,要么都不做。
(2)一致性(Consistency):应用程序所定义的事务,其单独成功的执行,必定是使数据库从一个一致性状态变到另一个一致性状态。
(3)隔离性(Isolation):一个事务的执行不能被其他事务干扰。
(4)持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就应该是持久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。
6. 事务隔离级别
脏写( Dirty Write ):一个事务修改了另一个未提交事务修改过的数据。或者,两个事务更新相同的数据源,如果第一个事务被提交,第二个却被撤销,那么连同第一个事务做的更新也被撤销。
脏读( Dirty Read ):一个事务读到了另一个未提交事务修改过的数据。
不可重复读(Non-Repeatable Read):一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交 后,该事务都能查询得到最新值。
幻读(Phantom):一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先 的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来。
读未提交(read uncommitted):读取未提交的数据。
读已提交(read committed):在同一个事务里相邻的两个SELECT命令可能看到不同的快照。
可重复读(repeatable read):确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。
可串行化(serializable):同一个事务内部后面的SELECT命令总能看到同样的数据。
需要注意的是,因为脏写这个问题太严重了,不论是哪种隔离级别,都不允许脏 写的情况发生。
7. 封锁
封锁粒度越小,发生争用可能性就越小,系统并发度越高,但消耗资源越多(包括获取锁、检查锁、释放锁),需要在锁开销和并发程度之间进行权衡。
共享锁(Shared Locks),简称 S 锁 。在事务要读取一条记录时,需要先获取该记录的 S 锁 。
独占锁(Exclusive Locks),也叫排他锁,简称 X 锁 。在事务要改动一条记录时,需要先获 取该记录的 X 锁 。
乐观锁:即乐观并发控制,是在数据提交更新时检查数据生成版本是不是修改之前的版本加1,如果是则正常更新,如果不是则返回错误信息;
悲观锁:即悲观并发控制,在数据修改之前先锁定数据,直到提交更新之后才解锁。
意向锁(Intention Lock):支持多粒度封锁,解决表锁可能和之前的行锁冲突的问题,原来加表锁之前会每行检查,看是否有行锁存在,非常耗时。现在要锁一行时先加意向锁,这样加表锁时直接进入阻塞状态,不需要一行一行的检查是否有行锁的存在。
意向共享锁,英文名: Intention Shared Lock ,简称 IS锁 。当事务准备在某条记录上加 S锁 时,需要先 在表级别加一个 IS 锁 。
意向独占锁,英文名: Intention Exclusive Lock ,简称 IX锁 。当事务准备在某条记录上加 X锁 时,需 要先在表级别加一个 IX 锁 。
一级封锁协议:事务 T 要修改数据 A 时必须加 X 锁,直到 T 结束才释放锁。防止同时修改,可解决 丢失修改 问题,因不能同时有两个事务对同一个数据进行修改,那么事务的修改就不会被覆盖。
二级封锁协议:在一级的基础上,要求读取数据 A 时必须加 S 锁,读取完马上释放 S 锁。防止修改时读取,可解决 丢失修改 和 读脏数据 问题,因为一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。
三级封锁协议:在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。防止读取时修改,可解决 丢失修改 和 读脏数据 问题,还进一步防止了 不可重复读 的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。
两段锁协议是指每个事务的执行可以分为两个阶段:生长阶段 (加锁阶段) 和衰退阶段 (解锁阶段)。 两段封锁法可以这样来实现:
事务开始后就处于加锁阶段,一直到执行 ROLLBACK 和 COMMIT 之前都是加锁阶段。 ROLLBACK 和 COMMIT 使事务进入解锁阶段,即在 ROLLBACK 和 COMMIT 模块中 DBMS 释放所有封锁。
8. 数据库故障恢复策略
事务故障恢复:由系统自动完成,反向扫描日志,对事务更新操作执行逆操作
系统故障恢复:由系统重启时自动完成,正向扫描日志,记录REDO队列和UNDO队列,对UNDO队列进行撤销处理,对REDO队列进行重做处理
登记日志文件遵循的两条原则:登记次序严格按照并发事务执行的时间次序;必须先写日志文件,后写数据库。
9. 加密
现代加密体系中算法通常是公开的,密钥是保密的并且需要向可信权威机构申请,安全性完全取决于密钥的保密性。
第六章 实体-联系方法
属性-联系方法:把需要数据库保存的所有属性放在一张关系表中,进而通过属性之间的联系来优化这个关系模式。
数据字典:对数据表中数据元素的定义和描述,目的是对数据流程图中的各个元素进行详细的说明。数据字典和数据流程图共同构成了系统的逻辑模型。
1. 数据库设计过程
数据库生命周期:需求分析、概念设计、逻辑设计、物理设计、数据库实现、运行维护。(前四个阶段被称作数据库设计四个阶段)
(1)需求分析:收集用户业务需求及数据库需要保存的信息内容,形成需求说明书,作为系统开发和验证的依据。
(2)概念设计:有了数据需求,就可以设计概念模式,概念模式与具体DBMS无关,通常使用实体-联系图表示,也叫E-R图。
(3)逻辑设计:在概念模式的基础上,将概念模式转换成逻辑模式,获得符合选定DBMS数据模型的逻辑结构,比如关系模式。
(4)物理设计:关系数据库的物理设计比较简单,仅需考虑索引机制、空间大小、块的大小等。在大数据存储系统中,物理设计还需考虑物理结构,即数据的存储格式、存储安排、存取方法。
(5)实现数据库:用DDL/DPL定义数据库结构、数据入库、编制与调试应用程序、数据库试运行
(6)数据库的运行和维护:数据库的转储和恢复,数据库安全控制,数据库性能的监督、分析和改进,数据库的重组织和重构。
2. 联系
同类实体集内部实体之间的联系称为一元联系;两个不同实体集之间的联系称为二元联系;三个不同实体集之间的联系称为三元联系,以此类推。
如果实体集 S 中的每个实体都参与联系集 L 的至少一个联系中,称实体集 S “完全参与”联系集 L。如果实体集 S 中只有部分实体参与联系集L 的联系中,称实体集 S “部分参与” 联系集 L.
3. E-R图
实体关系图 (Entity-Relationship,E-R),有三个组成部分:实体、属性、联系。用来进行关系型数据库系统的概念设计。
多对多:需要将联系转换为实体,然后在该实体上加上另外两个实体的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可。
一个实体转换为一个关系模式时:实体的一个属性对应位该表的一个列,实体的主键就是表的主键;
一个联系转换为一个关系模式:联系的属性对应表的属性,另外并上所有参与联系的各实体主键的并集。
第七章 属性-联系方法
1. 数据库规范化过程/概述范式
常见的范式有1NF、2NF、3NF、BCNF,他们的规范化程度是逐步增高的
(1)1NF是指数据库表的每一列都是不可分割的数据项,关系型数据库都要满足1NF;
(1)2NF是在1NF的基础上消除了非主属性对所有候选键的部分依赖;
(2)3NF是在2NF的基础上消除了非主属性对所有候选键的传递依赖;
(3)BCNF是在3NF的基础上消除了主属性对所有候选键的部分依赖和传递依赖。
规范化:一个较低范式的关系模式,依据其中的数据依赖,通过模式分解可以转换为较高范式关系模式的集合,称为规范化。
把较低范式的关系模式菲姐为较高范式的关系模式的方法并不是唯一的。只有保证分解后的关系模式与原关系模式等价,分解才有意义。如果仅仅要求分解具有无损连接性,那么一定能够到达BCNF。如果要求分解既具有无损连接性,有具有保持依赖性,则一定能够达到3NF,但不一定能达到BCNF
规范化程度越高:数据冗余、插入异常、删除异常、修改复杂等问题越少;查询效率越低。
规范化程度越低:减少查询所需要的连接表的个数,减少I/O和CPU时间,提高查询效率;插入异常、删除异常越多,修改越复杂。
第八章 查询处理与优化
第九章 大数据技术
1. 大数据特点(4V)
(3)速度快(Velocity):数据高度动态、随时间快速变化;有很强的时间要求,需要对数据处理速度快。
2. NoSQL数据模型
(2)列族存储系统:用表来组织数据,表中的每一行由行键来标识。
(4)图存储系统:使用图作为数据模型,有一个节点集合和表征了节点关系的边集合。
面试题
1. 数据库三要素
数据结构是所研究的对象类型的集合。它从语法角度表述了客观世界中数据对象本身的结构和数据对象之间的关联关系,是对系统静态特征的描述。
数据操作时对数据库中对象的实例允许执行的操作的集合,主要是指检索和更新(插入、删除、修改)两类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。数据操作时对系统动态特性的描述。
数据完整性约束是一组完整性规则的集合,规定数据库状态及状态变化所应满足的条件,以及保证数据的正确性、有效性和相容性。
2. 数据模型和数据模式的区别
数据模型是现实世界数据特征的抽象,用于描述一组数据的概念和定义。数据模型是数据库中数据的存储方式,是数据库系统的基础。在数据库中,数据的物理结构又称数据的存储结构,就是数据元素在计算机存储器中的表示及其配置;数据的逻辑结构则是指数据元素之间的逻辑关系,它是数据在用户或程序员面前的表现形式,数据的存储结构不一定与逻辑结构一致。概念模型,用于信息世界的建模
数据模式是基于选定的数据模型对数据进行“型”方面的刻画,而相应的“实例”则是对数据“值”方面的描述。先有数据模型,才能据其讨论相应数据模式,有了数据模式,就能依据该模式得到相应的实例。(1)外模式:是数据库用户的数据视图。外模式通常是(逻辑 )模式的子集,因此有多个外模式(2)(逻辑)模式:数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图。一个数据库只有一个模式。(3)内模式:也称存储模式,一个数据库只有一个内模式,是数据结构和存储方式的描述,是数据在数据库内部的组织方式。