1. 数据库系统(P173)
数据库是信息化社会中信息资源管理与开发利用的基础。
1.1. 数据库模式
数据库结构典型划分:三级结构,两级映射。
-
三级模式
数据库系统由,外模式、概念模式和内模式三级组成,如下图:
外模式,也称子模式或者用户模式,对应于用户级数据库,称为用户视图。外模式主要描述组成用户视图的各个记录的组成、相互关系、数据项特征、数据的安全性和完整性约束条件。一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。【注:从这个角度理解,一个外模式对应着Oralce数据库的一个用户及相关联的对象;SQL Server或MySQL数据库的一个逻辑数据库】。外模式用于描述用户(包括程序员和终端用户)看到或使用的那部分数据的逻辑结构,是数据库用户的数据视图。用户根据外模式,用数据操作语句或应用程序去操作数据库中的数据。
概念模式,也称为模式或者逻辑模式,对应于概念级数据库,称为DBA视图。概念模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,用以描述现实世界中的实体与性质及联系,定义记录、数据项、数据完整性约束条件及记录间的关系。【注:从这个角度来说,也可以认为概念模式是元数据+公共数据视图。例如Oralce中的Dict系列表和View系列表,SQL Server中的系统表等】。概念模式通常还包含有访问控制、保密定义和完整性检查等方面的内容。以及物理/概念模式之间的映射。一个数据库只能有一个概念模式。
内模式,对应于物理级数据库,称为内部视图,是物理结构和存储方式的描述,是数据在数据库内部的表示方式。【注:Orale数据库中的数据库文件;SQL Server、MySQL中的数据库文件等,同时内模式是逻辑的。它关注的是存储记录,即操作系统级别的文件或者记录块,和记录的内容无关;在这里存在一个概念模式的数据向存储记录的映射,在概念模式中定义】。内模式不同于物理层,它假设外存是一个无限的线性地址空间。内模式定义是存储记录的类型、存储域的表示和存储记录的物理顺序,以及索引和存储路径等数据的存储组织。一个数据库只有一个内模式。
在三级结构中,概念模式是关键。内模式依赖于概念模式,独立于外模式和存储设备;外模式面向应用【注:由概念模式定义外模式,由概念模式映射为内模式】。独立于内模式和存储设备;应用程序依赖于外模式,独立于概念模式和内模式。
【注:三层的结构,是抽象(概念模式)的应用(外模式)和抽象的实现(内模式)的结构。和信息化系统有异曲同工之妙。业务应用à逻辑模型à实现模型à物理实现】
-
两级独立
指物理独立性(应用程序物理位置和数据库物理位置无关,是逻辑联系的)和逻辑独立性(应用程序逻辑结构和数据库概念模式的逻辑结构无关【注:这个比较有难度,即使加了HIbernate层,也要求部分数据类型和概念模式定义的数据类型是一致的】)。
数据模型
数据模型是现实世界数据特征的抽象。包括三个部分,数据结构、数据操作和数据约束。【注:也就是说,我们在抽象现实世界的数据特征时,抽象出了三个维度,即数据结构、数据操作和数据约束;从这三个维度可以描述现实世界的数据。真的吗?我表示怀疑。】。数据结构描述数据的类型、内容、性质和数据间的联系,数据操作和数据约束建立在数据结构之上。
数据模型的分类
数据模型分为两类,概念数据模型和基本数据模型。按照用户的观点对数据和信息建模,主要用于数据库设计,一般采用实体联系方法,即E-R模型,也称为概念模型。按照计算机的观点对数据和信息进行建模,主要用于数据库的实现,通常用数据结构、数据操作和数据约束三部分组成。数据结构对数据和信息的静态特性的描述,数据操作是对动态特性的操作,数据约束则是定义了完整性约束的集合。
基本的数据模型还包括:层次模型、网状模型、关系模型和面向对象模型。
-
层次模型
采用树形结构作为数据的组织方式。
-
网状模型
用有向图来描述实体类型和实体之间的联系。层次模型是网状模型的一个特例。
-
关系模型
用表格结构表达实体集,用外键表示实体之间的联系。应用最广。
-
面向对象模型
用面向对象的观点来描述现实世界实体的逻辑关系、对象之间的限制和联系等模型。
关系模型
关系的描述,称为关系模式,通常记为R(A1,A2… … A n)。关系是关系模式某一时刻的状态和内容。关系模式是静态的不变的,关系是动态的、变化的。
-
关系运算
关系代数的运算主要有:并、交、差、笛卡尔积、选择、投影、连接和除法运算。
并、交、差,要求R和S拥有相同的列,是对R和S的值的运算。
笛卡尔积,R有m元关系,S有n元关系,R*S是m+n元的元组集合。【注:各种外联、内联等的基础】
投影,
选择,从R中抽取满足给定限制条件的记录。【注:对应实现模型中的SQL操作语句的SELECT等查询操作】
连接,从两个关系的笛卡尔积选取属性之间满足一定条件的元组。
除,
规范化理论
-
函数依赖和键
求候选键的快捷方法,图示法,两个步骤如下:
-
将关系模式的函数依赖关系,用有向图的方式表示,顶点表示属性,弧线表示属性间的依赖关系。
-
找出入度为零的属性集,并以该属性为起点,常识遍历有向图,若能正常遍历图中所有结点,则该属性集为关系模式的候选键;若入度为0的属性集不能遍历图中所有节点,尝试将既有入度又有出度的中间节点,加入入度为0的属性集中,直到该集合能够遍历所有节点。
-
范式
为了设计良好的数据库,人们定义了良好的关系模式标准,称为范式(Normal Form ,NF)。分为:1NF,2NF,3NF,BCNF,4NF和5NF。
-
第一范式(1NF),在关系模式R中,当且仅当所有属性值包含原子值,且每个分量是不可再分的数据项,则成R满足1NF。
-
第二范式(2NF),满足第一范式会有很多重复值,修改数据会引起疏漏。当且仅当R满足第一范式后,每个非键属性完全依赖候选键时,则称R满足2NF。
-
第三范式(3NF),满足第一范式,且没有非键属性传递依赖候选键。
-
BCNF,R满足第一范式,且没有属性传递依赖候选键
-
第四范式(4NF),是BCNF范式的推广,对应多值依赖模型所定义的规范化形式。
-
关系模式分解,如果关系模式存在异常,将一个关系模式分解为几个子模式。
数据库访问接口
数据库访问接口是指数据库和应用程序之间的接口。常用的接口有专用调用接口、开发数据库互连接口(Open DataBase Connectivity,ODBC)和java数据库连接(Java DataBase Connectivity,JDBC)等。
-
专用调用
数据库发展初期,每个数据库都有一套自己的访问数据库的API接口,只能本数据库专用,称为专用接口。
-
ODBC
是一组访问数据库的标准API(利用结构化查询语句SQL完成大部分工作),不依赖于任何DBMS,不直接与DBMS打交道,所有的工作通过DBMS提供的ODBC驱动完成。
ODBCàODBC驱动àDBMS(DB)。
-
JDBC
和ODBC类似,但是只能拥有Java程序。使用Java语言编写的执行SQL语句的API接口。
实现JDBC驱动有四种类型。
类型1:通过调用ODBC的API来实现,即建立JDBC-ODBC桥。
类型2
数据库的控制功能
DBMS对数据库的控制功能,包括并发控制、性能优化、数据完整性和安全性,以及数据库的备份和恢复。
并发控制
在多用户共享系统中,许多事务可能同时对同一数据库进行操作,称为并发控制。【注:所谓并发,即同时发送,什么同时发生呢?对数据的操作同时发生,不仅仅是主体同时发生,数据库同时执行2个以上的事务,也包括客体的并发,即同时有2个以上的事务操作客体,在这里更加关注客体的并发,或者是被并发】
-
事务的基本概念
DBMS工作的基本单位,由一系列的数据库操作序列组成【注:是序列,有先后关系】,操作序列要么全部完成,要么全部不完成。事务拥有如下特性:
原子性:事务中的序列是不可分的。
一致性:是指数据库从一个一致性状态到另外一个一致性状态。
隔离性(独立性):事务间不会相关干扰。
持久性:事务一旦提交,数据库的改变是永久性的。
-
数据的不一致问题【注:既然有了事务,那么为什么还会出现事务的不一致问题呢?】
事务的并发操作,会导致数据的不一致。
并发的不一致问题,其中一个原因,对客体读写不一致的问题。即对事务T1而言,读操作是不需要放到T1事务中的,但在线程执行T1前读取了数据,在T1提交前,又有另外的事务T2修改了数据。即读写不在同一事务中造成。
丢失修改:事务A和B同时读取数据并修改,后提交的事务B覆盖了先提交事务A的结果。
脏数据:事务A将数据写回磁盘,事务B读取数据后,事务A由于某种原因被滚回。
不可重复读:事务A读取数据后,事务B更新了数据;事务A仍然使用的之前的值。
-
封锁协议【注:并发出现了问题,此时有在事务之外;如果将读操作放入事务,会导致性能的大幅度降低,就需要对并发进行控制;即事务控制的写操作】
采用锁技术,来控制并发;包括X锁(排他锁)和S锁(共享锁)。
排他锁(X):事务T对数据A加X锁,允许事务T对数据进行读和写;其他事务要等事务T解除X锁后,才能对数据加其他类型的锁。
共享锁(S):允许并发读;事务T对数据加S锁,在事务解除S锁之前,不允许其他事务加X锁。
常见的封锁协议:一级封锁协议:事务T在修改数据R之前先对加X锁,直至事务结束才释放。防止了丢失修改,即事务A和B同时修改相同数据时,后提交的修改会覆盖前面的修改,同时修改a=10。【注:!一级封锁机制,仅对修改加锁,但对读没有任何机制要求,所以其他事务时可以读;也可以说一级封锁机制,仅仅是写机制,因此不能避免读脏数据。】
二级封锁协议:在一级封锁机制的基础上,读需要加s锁(只有加S锁,才能读数据R,在前面读是不加锁的),读完后释放S锁。即必须等X锁解除后,才能读,防止了脏数据。【注:对数据R的读取加S锁,修改加X锁】
三级封锁协议:在一级封锁机制的基础上,加S锁,直至事务T结束,才释放S锁。即首先事务T,对R加X锁,开始写,写完后去掉X锁,但只有事务T结束后,才能加S锁读数据。
两段锁协议:扩展阶段可以申请读、写锁;收缩解读不能申请同一锁。
【注:如果不采用锁的机制,数据是可以任意读取的,此是前提,所以才会出现一级封锁协议,只能防止丢失修改,不能防止重复读和脏数据,此机制和java多线程的并发机制一致,即对资源的pv操作机制】
从上图可以看出:一级事务排序结果(事务的目的,就是将操作序列化),T1w,T2w;二级封锁的排序结果:T1w,T2r;三级封锁协议的排序结果:T1r,T2w,即数据在整个T事务区间都加锁。
数据库的性能优化
性能优化方面:硬件升级、数据库设计、检索策略和查询优化。
数据库规范化程度越高,冗余越少。数据库的规范化使得关系模式被不断的拆解,这样使得关系模式越来越复杂。但是在查询时需要频繁的链接操作。
索引建立原则:
-
经常查询,但是不经常更新的属性。
-
索引过多会影响insert、update和delete,因为要更新索引。
-
小数据量,不需要建索引。
数据库的完整性
数据库的完整性是指数据库中数据的完整性和相容性,由完整性性约束来保证。
-
完整性约束条件
具有完整性约束的定义和检查功能。定完整性约束,检查用户发出的请求是否违背了完整性约束。
-
实体完整性
主键中任一属性不能为空。
-
参照完整性
基本关系R(参照关系)中含有另一基本关系S(被参照关系)的主键PK相对应的属性组FK(FK称为R的外键),按照参照完整性要求,在R上,每个元组在FK上的值必须是S中某个元组PK的值。
实际情况中,针对外键是否接受空值,可以有不同的删除方式。
级联删除:删除关系S中的记录,将参考关系中所有外键值与被参考关系中药删除的原则主键值相同的元组一起删除【注:RàS,删除S中的一条记录,同时删除R中依赖该记录的记录】。
受限删除:目前数据库默认删除方式,要删除关系S中的一条记录,前提是没有任何一个关系Rn依赖该记录。否则拒绝删除S中的记录。
置空删除:删除S中的一条记录,将依赖该记录的关系Rn中,元组值(FK值)置为null值。
-
用户定义的完整性
-
触发器
数据库的安全性
备份与恢复技术
将数据库从错误状态恢复到某一已知的正确状态功能,称为数据库的恢复。数据恢复的基本原理就是冗余,建立冗余的方法有数据备份和登录日志文件。
根据不同的故障类型,采用不同的故障恢复策略。
-
事务故障恢复。数据库系统自动完成,反向扫描日志文件,对更新操作执行逆操作,直至事务的起点。
-
系统故障恢复。在数据库系统重启时自动完成。正向扫描日志,找出故障发生前的事务(放入重做队列),和故障发生时尚未完成的事务(放入取消队列);逆向扫描日志,对尚未完成的事务,做逆操作,对重做队列的事务,做重做处理。
-
介质故障和病毒故障恢复。导入备份数据,从故障点逆向扫描,找出日志中已提交的事务,并记入redo队列;从备份数据的起始点正向扫描,根据redo队列重做已经完成的事务。
-
有检查点的恢复技术。
数据中心建设
建立专用的存储系统,集中存储数据。
构建统一的数据库集中运行平台,提高数据处理能力;采用集群技术。
建立多系统应用平台,提高集中运行平台的适应能力。
整合优化现在计算机资源设备,提高集中管理水平和能力。
扩展数据备份系统,提高系统的可靠性。
建立集中运行的管理机制。
数据库设计和建模
数据库设计是指对一个给定的应用环境,提供一个确定最优的数据模型和处理模式的逻辑设计,以及一个确定数据库存储结构与存取方法的物理设计。
数据库设计阶段
可以分为五个阶段:规划、需求分析、概念设计、逻辑设计和物理设计。
-
规划。建立数据库的必要性和可行性,数据库在信息化系统中所处的地位,及各个数据库之间的关系。
-
需求分析。了解用户的数据和对数据的处理要求。包括数据、数据的特征、数据使用频率和数据量估计。
-
概念模型。按照特定的方法,抽象出一个不依赖与任何DBMS的数据模型,即概念模型。
-
逻辑设计。将概念模型转换为某个特定DBMS上的逻辑模型。首先为概念模型选择一个合适数据库的数据模型(关系、层次、网状、OO),转换为特定DBMS模型。
-
物理设计。为逻辑模型选取一个合适的物理结构。主要是在物理设备上的存储结构和存取方法。包括:设计存储记录结构,包括记录组成、数据项的类型和长度;确定数据存储安排;设计访问方法;完整性和安全性设计;数据库程序设计。
实体联系模型
ER模型。包括三个要素:实体(矩形)、属性(椭圆)和实体间的关系(菱形)。
-
实体间的联系。一对一,一对多;多对多。
-
E-R图的集成。标识实体,确定实体间联系,分配属性。子ER图的集成冲突:属性冲突、命名冲突和结构冲突。同一现实对象,存在不同抽象的实体。
-
ER图向关系模式的转换。实体对应关系模式,实体属性就是关系的属性,实体的主键监就是关系的主键。实体关系转换,1:1,1:n可以转换为独立的关系模式,也可以合并;m:n转换为独立的关系模式。
注意情况:
多值属性的处理。实体包含一个多值属性,可以将多值属性,提升为一个实体,称为弱实体【注:传递依赖】。可以将多值数据转换为一个关系模式。
Blob型属性处理。Blob属性建议建立一个独立的关系模式。
派生属性。由其他属性计算得出属性。转换关系模式时,不转换派生属性【注:一般情况下,但对于大数据量处理系统或统计查询系统应该单独考虑设计】。
分布式数据库设计
思想,将传统集中式数据库中的数据分布于网络的多个计算机中。每个计算机拥有一个完整的DBMS副本,拥有自己局部的数据库。位于不同地点的计算机通过网络连接形成一个完整的、全局的数据库。
分布式数据库概述
分布式数据库由一组数据组成,这组数据分布在计算机网络中的不同计算机上,网络上的每个节点具有独立的处理能力(也称为场地自治),它可以执行局部应用,同时通过网络通讯子系统执行全局应用。
特点:数据独立性,集中于自治共享结合的控制结构,适当增加数据冗余度,全局的一致性、可串行性和可恢复性。
-
分布式数据库的体系结构图
全局外模式。全局应用的用户视图。是全局概念模式的子集。直接与用户交互
全局概念模式。定义数据库中数据的整体逻辑结构。通常采用关系模型。
分片模式。
分布模式。将数据分布在不同的物理位置。定义数据片段的存放节点。
局部概念模式。同传统概念模式。
局部物理模式。
-
分布式数据库的优点
数据分片
将数据库整体逻辑结构分解为合适的逻辑单位(片段)。
-
数据分片的分类
水平分片和垂直分片两种基本方式。
水平分片。把元组差分为子集,一个子集一个分片。
垂直分片。按照属性分片。
导出分片。
混合分片。
分布式数据库查询优化
数据仓库技术(P211)
数据仓库是面向主题的、集成的、相对稳定的、放映历史变化的数据集合,用于管理决策支持。体系结构图如下图:
基础是:数据源。
OLAP: On-Line Analytical Processing,联机分析处理,对需要分析的数据进行有效的集成,按照多维模型进行组织,以便进行多角度、多层次的分析,并发现趋势。
前端工具:应用。
联机分析处理
数据处理包括两大类,联机事务处理(On-Line Transaction Process ,OLTP)和联机分析处理(OLAP)。OLTP应用传统数据库数据,用于处理基本的日常的事务,OLAP应用于数据仓库,用于处理复杂的分析操作,侧重决策支持。OLTP中,数据以二维进行组织,OLAP中数据以多维进行组织。区别如下图:
-
数据立方体
三维结构最为直观,如下图:
-
多维分析
OLAP的多维分析包括:钻取、分片或分块和旋转。【注:根据维度的分类。】
钻取,改变维的层次,变换数据粒度。包括向下钻取和向上钻取。向下钻取,从汇总到细节,粒度变小,例如:长沙230个,向下,橙汁130、雪碧50、可乐50等;向上相反,从细节到汇总。
分片和分块,取一个维度,剩余维度为2维,即分片,2维以上即分块。
旋转,变换维度方向,例如行列互换,从地点维度,换为种类维度。
-
实现方法
OLAP有多种实现方式,根据存储方式的不同,分为关系型(关系数据库存储数据)、多维性(以多维数据组织存储数据)、混合型(底层关系,上层多维)。
数据仓库概述
数据仓库的根本任务是,将企业的信息进行整理归纳和重组,并及时的提供给相应的管理人员。数据仓库是一个工程,也是一个过程。
-
ETL过程
针对现有的各业务系统的数据,进行抽取、清理,并有效集成,按照主题组织,整个过程可以成为抽取-转换和加载(Extraction Transformation Loading ,ETL)过程。负责把异构数据库的数据抽取到中间层,进行转换和集成,最后加载到数据仓库或者数据集市中。
按照主题进行管理。
-
数据仓库的分类
数据仓库从结构【注:从“结构”上,好像不准确】上可以分为三类:企业仓库、数据集市和虚拟仓库。
企业仓库:面向企业级应用;包含所有企业的主题,提供全企业范围内的数据集成,包含详细数据和汇总数据,容量Tb级。
数据集市:面向企业内的部门级的应用,包含特定主题。包括从属数据集市(数据来源与企业仓库)和独立数据集市(数据直接来自业务系统)。
虚拟仓库:是操作型数据库上视图的集成。
-
非结构化数据与数据仓库
采用元数据的方式,存储非结构化数据。
数据仓库的设计方法
包括自顶向下、自底向上和混合方式(混合以前两种)。
数据挖掘技术
利用数学的、统计的、人工智能的和神经网络领域的科学方法,从数据中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势。
数据挖掘概述
和传统数据分析(查询、统计、报表、联机应用分析)的本质区别是,数据挖掘是在没有明确假设的前提下去挖掘信息,发现知识。挖掘信息的特点:先知、有效、可实用。
-
数据挖掘的体系结构图
-
数据发掘的流程
问题定义,弄清要干什么。
建立挖掘数据库,从数据库或数据仓库抽取数据,建立挖掘数据库。
分析数据, 从数据中找出规律和趋势。
调整数据,对需要解决的问题进行进一步的明确和量化,根据问题的需求对数据进行增删调整。
模型化,利用神经网络、决策树和数理统计等方法,建立知识模型。
评价和解释,对模型进行评价和解释。
常用的技术和方法
-
数据挖掘的常用技术
决策树方法,分类方法,粗糙集神经网络,关联规则,概念树,遗传算法(繁殖、交叉、变异),依赖性分析(分析依赖关系),公式发现(发现公式中的常数项),统计分析方法(对数据之间的关系进行分析),模糊论方法,可视化方法。
-
数据挖掘的分析方法
分析方法分为6种,关联分析(分析事件之间的关联性)、序列分析(分析一定时间间隔内发生的事件)、分类分析、聚类分析、预测和时间序列分析。
数据挖掘技术的应用
包括空间数据挖掘、多媒体数据挖掘和文本数据挖掘。