重点1:数据库模式
1、数据库系统划分为三个抽象级:用户级、概念级、物理级(对应外模式、概念模式、内模式):
(1)用户级数据库:对应于外模式,是最接近用户的一级数据库,是用户可以看到和使用的数据库,又称用户视图,其主要由外部记录组成,不同的用户视图可以互相重叠,用户的所有操作都是针对用户视图进行的。
(2)概念级数据库:对应于概念模式,介于用户级和物理级之间,是所有用户视图的最小并集,是数据库管理员可看到和使用的数据库,又称DBA(Database Administrator,数据库管理员)视图,其由概念记录组成,一个数据库可有多个不同的用户视图,每个用户视图由数据库某一部分的抽象表示所组成;一个数据库应用系统只存在一个DBA视图,它把数据库作为一个整体的抽象表示;概念级模式把用户视图有机地结合成一个整体,综合平衡考虑所有用户要求,实现数据的一致性、最大限度降低数据冗余、准确地反映数据间的联系。
(3)物理级数据库:对应于内模式,是数据库的底层表示,它描述数据的实际存储组织,是最接近于物理存储的级,又称内部视图,其由内部记录组成,物理级数据库并不是真正的物理存储,而是最接近于物理存储的级。
2、数据库系统的三级模式为外模式、概念模式、内模式:
(1)概念模式(亦称模式、逻辑模式)用以描述整个数据库中数据库的逻辑结构,描述现实世界中的实体及其性质与联系,定义记录、数据项、数据的完整性约束条件及记录之间的联系,是数据项值的框架。一个数据库只有一个概念模式。
(2)外模式(亦称子模式、用户模式)用以描述用户看到或使用的那部分数据的逻辑结构,用户根据外模式用数据操作语句或应用程序去操作数据库中的数据。一个数据库可以有多个外模式;一个应用程序只能使用一个外模式。
(3)内模式。一个数据库只有一个内模式。
3、内模式、模式和外模式之间的关系如下:
(1)(概念)模式是数据库的中心与关键。
(2)内模式依赖于(概念)模式,独立于外模式和存储设备。
(3)外模式面向具体的应用,独立于内模式和存储设备。
(4)应用程序依赖于外模式,独立于(概念)模式和内模式。
4、数据库系统两级独立性是指物理独立性和逻辑独立性;三个抽象级间通过两级映射(外模式——模式映射,模式——内模式映射)进行相互转换,使得数据库的三级形成一个统一的整体。
(1)物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的,当数据的物理存储改变时,应用程序不需要改变。
(2)逻辑独立性是指用户的应用程序与数据库中的逻辑结构是相互独立的,当数据的逻辑结构改变时,应用程序不需要改变。
重点2:数据库设计过程
重点3:E-R模型
1、E-R图包括3个要素:
(1)实体(型):用矩形框表示,框内标注实体名称。
(2)属性:用椭圆形表示,并用连线与实体连接起来。
(3)实体之间的联系:用菱形框表示,框内标注联系名称,并用连线将菱形框分别与有关实体相连,并在连线上注明联系类型。E-R图示例如下所示。
重点4:规范化理论
非规范化的关系模式,可能存在的问题包括:数据冗余、更新异常、插入异常、删除异常。
要点1:函数依赖
设R(U)是 U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。
要点2:求候选键的步骤
1、将关系模式的函数依赖关系“有向图”的方式表示。
2、找入度为0为的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中的所有结点,则该属性集即为关系模式的候选键。
3、若入度为0的属性集不能遍历图中的所有结点,则需要尝试性的将一些中间结点并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
要点3:数据范式
1、范式的目的是逐步优化以解决插入异常、删除异常和数据冗余。
2、把一个低一级的关系模型分解为高一级关系模型的过程,称为关系模型的规范化。
3、关系模型分解必须遵守两个准则:
(1)无损连接性:信息不失真(不增减信息)。
(2)函数依赖保持性:不破坏属性间存在的依赖关系。
4、规范化的基本思想是逐步消除不合适的函数依赖,使数据库中的各个关系模型达到某种程度的分离。
(1)1NF(Normal Form)是最低的规范化要求,如果关系R中所有属性的值域都是简单域,其元素(即属性)不可再分,是属性项而不是属性组,那么关系模型R是第一范式的。满足1NF的关系模型会有许多重复值,并且增加了修改其数据时引起疏漏的可能性。
(2)2NF:如果一个关系R属于1NF,且所有的非主属性都完全依赖于主属性,则称之为第二范式。
(3)3NF:如果一个关系R属于2NF,且每个非主属性不传递依赖于主属性,这种关系是3NF。
要点4:无损分解
1、保持函数依赖分解
设数据库模式 �=�1,�2,…,�� 是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式 ��
上FD集是 �� ,如果 �1,�2,…,�� 与F是等价的(即相互逻辑蕴涵),那么称分解p保持FD。
2、无损联接分解是指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式。
3、定理:如果R的分解为 �=�1,�2 ,F为R所满足的函数依赖集合,分解p具有无损联接性的充分必要条件是: 或�1∩�2→(�1−�2)或�1∩�2→(�2−�1)
其中, �1∩�2 表示模式的交,为 �1 和 �2 中的公共属性组成, (�1−�2) 或 (�2−�1) 表示模式的差集, (�1−�2) 表示 �1 中去除 �1 和 �2 的公共属性所组成;当模式R分解成两个关系模式 �1 和 �2
时,如果 �1 与 �2 的公共属性能函数决定 �1 中或 �2 中的其它属性,这样的分解就具有无损联接性。
4、关系模式 �<�,�> 来说有以下的推理规则:
(1)自反律(Reflexivity):若 �⊆�⊆� ,则 �→� 成立。
(2)增广律(Augmentation):若 �⊆� 且 �→� ,则 ��→�� 成立。
(3)传递率(Transitivity):若 �→� 且 �→� ,则 �→� 成立。
根据以上三条推理规则可以得到下面三条推理规则:
(4)合并规则:由 �→� , �→� ,有 �→�� 。
(5)伪传递规则:由 �→� , ��→� ,有 ��→� 。
(6)分解规则:由 �→� 及 �⊆� ,有 �→� 。
要点5:反规范化
1、常见的反规范化技术包括:
(1)增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作;
(2)增加派生列:指增加的列可以通过表中其他数据计算生成,它的作用是在查询时减少计算量,从而加快查询速度;
(3)重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能;
(4)分割表:有时对表做分割可以提高性能,表分割有两种方式:
- 水平分割:根据一列或多列数据的值把数据行放到两个独立的表中;水平分割通常在下面的情况下使用:
情况1:表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询效率;
情况2:表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用;
情况3:需要把数据存放到多个介质上。
- 垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中,如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数;其缺点是需要管理冗余列,查询所有数据需要连接操作。
重点6:并发控制
要点1:事务的概念
1、数据库系统运行的基本工作单位是事务,事务相当于操作系统中的进程,是用户定义的一个数据库操作序列,这些操作序列要么全做要么全不做,是一个不可分割的工作单位。
2、事务的特性:
(1)原子性(Atomicity):数据库的逻辑工作单位。
(2)一致性(Consistency):使数据库从一个一致性状态变到另一个一致性状态。
(3)隔离性(Isolation):不能被其他事务干扰。
(4)持续性(永久性)(Durability):一旦提交,改变就是永久性的。
要点2:并发产生的问题
数据库并发问题可以归结为5类,包括3类数据读问题(脏读、不可重复度、幻读)和2类数据更新问题(第一类丢失更新和第二类丢失更新)。
1、脏读(Dirty Read):A事务读取了B事务尚未提交的更改数据,并在此数据的基础上进行操作;如果此时B事务回滚,那么A事务之前读到的数据就是脏数据。
2、不可重复读(Unrepeatable Read):不可重复读指的是事务在不同的时间点,读取到的数据不同。
3、幻读(Phantom Read):幻象读一般发生在计算统计数据的事务中,A事务读取了B事务提交的新增数据,这时A事务将出现幻象读的问题。
4、不可重复读与幻读比较
比较 | 不可重复读 | 幻读 |
---|---|---|
读取对象 | 读到其它事务已经提交的修改或删除数据 | 读到其它事务已经提交的新增数据 |
采取措施 | 对所要操作的数据添加行级锁,避免这些数据发生变化 | 对所要操作的数据所在表添加表级锁,即将整张表锁定(在 Oracle 中,是以多版本数据的方式实现的) |
5、第一类丢失更新:A事务回滚时,把B事务中已经提交的更新数据给覆盖了。
6、第二类丢失更新:A事务提交后覆盖了B事务已经提交的数据,导致B事务所做操作丢失。
要点3:封锁技术
1、锁类型
(1)排他型封锁(X封锁):如果事务T对数据A(可以是数据项、记录、数据集,乃至整个数据库)实现了X封锁,那么只允许事务T读取和修改数据A,其他事务要等事务T解除X封锁以后,才能对数据A实现任何类型的封锁;可见X封锁只允许一个事务独锁某个数据,具有排他性。
(2)共享型封锁(S封锁,允许并发读):如果事务T对数据A实现了S封锁,那么允许事务T读取数据A,但不能修改数据A,在所有S封锁解除之前绝不允许任何事务对数据A实现X封锁。
数据库是一个共享资源,它允许多个用户程序并行地存取数据库中的数据,但是,如果系统对并行操作不加以控制,就会存取不正确的数据,破坏数据库的完整性。
2、封锁协议
在多个事务并发执行的系统中,主要采取封锁协议来进行处理:
(1)一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放;因为对数据修改加了排他性锁,所以可防止丢失修改,并保证事务T是可恢复的;但还是会发生不可重复读与脏读现象。
(2)二级封锁协议:是在一级封锁协议的基础上,再加上事务T在读取数据R之前先对其加S锁,读完后即释放S锁;二级封锁协议不但可防止丢失修改,还因为加了共享读锁,因此可防止脏读现象,但仍然会发生不可重复读。
(3)三级封锁协议:在一级封锁协议的基础上,再加上事务T在读取数据 R之前先对其加S锁,直到事务结束才释放;三级封锁协议可防止丢失修改、 防止脏读与防止数据重复读。
(4)两段锁协议
所有事务必须分两个阶段对数据项加锁和解锁:
- 扩展阶段是在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
- 收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁;若并发执行的所有事务均遵守两段封锁协议,则对这些事务的任何并发调度策略都是可串行化的。遵守两段封锁协议的事务可能发生死锁。
3、封锁粒度
所谓封锁的粒度即是被封锁数据目标的大小,在关系数据库中,封锁粒度有属性值、属性值集、元组、关系、某索引项(或整个索引)、整个关系数据库、物理页(块)等几种。
封锁粒度小则并发性高,但开销大;封锁粒度大则并发性低,但开销小。综合平衡照顾不同需求以合理选取适当的封锁粒度是很重要的。
要点4:死锁
死锁是指多个用户申请不同封锁,由于申请者均拥有一部分封锁权而又需等待另外用户拥有的部分封锁而引起的永无休止的等待。
一般来讲,死锁是可以避免的,目前采用的办法有以下几种:
(1)预防法:采用一定的操作方式以保证避免死锁的出现,顺序申请法、一次申请法等即是此类方法:
- 顺序申请法:指对封锁对象按序编号,在用户申请封锁时必须按编号顺序(从小到大或反之)申请,这样能避免死锁发生;
- 一次申请法:指用户在一个完整操作过程中必须一次性申请它所需要的所有封锁,并在操作结束后一次性归还所有封锁,这样也能避免死锁的发生;
(2)解除法:此种方法允许产生死锁,并在死锁产生后通过解锁程序以解除死锁。这种方法需要有两个程序,一是死锁检测程序,用它测定死锁是否发生,另一是解锁程序,一旦经测定系统已产生死锁则启动解锁程序以解除死锁。
重点7:数据库完整性约束
要点1:数据库安全性
描述 | 说明 |
---|---|
用户标识和鉴定 | 最外层的安全保护措施,可以使用用户账户、口令及随机数检验等方式 |
存取控制 | 对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限 |
密码存储和传输 | 对远程终端信息密码传输 |
视图的保护 | 对视图进行授权 |
审计 | 使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来 |
要点2:数据备份
1、冷备份:也称为静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来。
2、热备份:也称为动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。
优点 | 缺点 | |
---|---|---|
冷备份 | 非常快速的备份方法(只需要复制文件) 容易归档(简单复制即可) 容易恢复到某个时间点上(只需要将文件再复制回去) 能与归档方法相结合,做数据库“最佳状态”的恢复 低维护度,高度安全 |
单独使用时,只能提供某一时间点上的恢复; 在实施备份的全过程中,数据库必须要作备份而不能做其他工作; 若磁盘空间有限只能复制到外部存储设备上,速度会很慢; 不能按表或用户等维度进行恢复; |
热备份 | 可在表空间或数据库文件级备份,备份时间短; 备份时数据库仍可使用; 可达到秒级恢复(恢复到某一时间点); 可对几乎所有数据库实体做恢复。 |
不能出错,否则后果严重; 若热备份不成功,所得结果不可用于时间点的恢复; |
3、数据备份方式
(1)完全备份:备份所有数据。
(2)差量备份:仅备份上一次完全备份之后变化的数据。
(3)增量备份:备份上一次备份之后变化的数据。
要点3:数据库故障与恢复
故障关系 | 故障原因 | 解决方法 |
---|---|---|
事务本身的不可预期故障 | 本身逻辑 | 在程序中预先设置Rollback语句 |
算法溢出、违反存储保护 | 由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态 | |
系统故障 | 系统停止运转 | 通常使用检查点法 |
介质故障 | 外存被破坏 | 一般使用日志重做业务 |
重点8:分布式数据库
要点1:体系结构
要点2:分布式数据中的基本概念
要点3:数据表分区
1、表分区就是将一个数据量比较大的表,用某种方法把数据从物理上分成若干个小表来存储,从逻辑上来看还是一个大表。
2、分区与分表的区别于联系
(1)两者都针对数据表,将数据做到分布式,提高数据检索的效率,降低数据库的频繁I/O压力值。
(2)分表是真正的生成数据表,是将一张大数据量的表分成多个小表实现数据均衡。
(3)分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘、系统或是不同服务器存储介质中,实际上还是一张表。
3、分区的优点
(1)相对于单个文件系统或是硬盘,分区可以存储更多的数据。
(2)数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区即可。
(3)精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率。
(4)可跨多个分区磁盘查询来提高查询的吞吐量。
(5)在涉及聚合函数查询时更容易进行数据的合并。
4、分区策略
(1)范围分区(Range):根据数据库表中某一字段的值的范围来划分分区,如年份小于2016的分成一个区,其它分成另一个区。
(2)散列分区(Hash):根据字段的Hash值进行均匀分布,尽可能的实现各分区数据大致相等。
(3)列表分区(List):根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分,如长沙、武汉分成一个区,北京分为一个区。
重点9:数据仓库与数据挖掘
要点1:数据仓库的特点
1、面向主题的,即数据按主题组织。
2、集成的:消除了源数据中的不一致性,提供整个企业的一致性全局信息。
3、相对稳定的(非易失的):主要进行查询操作,只有少量的修改和删除操作(或是不删除)。
4、反映历史变化(随着时间变化):记录了企业从过去某一时刻到当前各个阶段的信息,可对发展历程和未来趋势做定量分析和预测。
要点2:联邦数据库FDBS
1、概念:联邦数据库系统是一个彼此写作却又相互独立的成员数据库(CDBS)的集合,它将成员数据库系统按不同程度进行集成,对该系统整体提供控制和协同操作的软件叫做联邦数据库管理系统(FDBMS)。
2、特征:分布性、异构性、自治性、透明性。
3、分类:紧耦合、松耦合。
重点10:NoSQL
非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
1、与关系型数据库相比,NoSQL数据库具有以下几个优点:
(1)易扩展;
(2)大数据量,高性能;
(3)灵活的数据模型:无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式;
(4)高可用:在不太影响性能的情况,就可以方便地实现高可用的架构;比如Cassandra、HBase模型,通过复制模型也能实现高可用。
关系数据库模式 | NoSQL模式 | |
---|---|---|
并发支持 | 支持并发、效率低 | 并发性能高 |
存储域查询 | 关系表方式存储、SQL查询 | 海量数据存储、查询效率高 |
扩展方式 | 向上扩展 | 向外扩展 |
索引方式 | B树、哈希等 | 键值索引 |
应用领域 | 面向通用领域 | 特定应用领域 |
重点11:内存数据库
内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,速度通常是传统数据库10倍以上。
内存数据库最大的特点是其“主拷贝”或“工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。
常见的内存数据库包括:Redis、extreme DB、TT、Fast DB、SQLite、Microsoft SQL Server Compact、MySQL的Memory存储引擎等。
重点12:大数据
1、与传统数据库的比较
比较维度 | 传统数据 | 大数据 |
---|---|---|
数据量 | GB或TB | PB(1PB=1024TB) |
结构化程度 | 结构化或半结构化数据 | 所有类型的数据 |
数据分析需求 | 现有数据的分析与监测 | 深度分析(关联分析、回归分析) |
硬件平台 | 高端服务器 | 集群平台 |
2、大数据处理系统应该具有的重要特征:高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。