基本概念
数据库系统DBS:是一个采用了数据库技术,有组织地、动态地存储大量相关数据,方便多用户访问的计算机系统。由下面这几部分组成:
- 数据库(统一管理、长期存储在计算机内的,有组织的相关数据的集合。)
- 硬件(构成计算机系统包括存储数据所需的外部设备。)
- 软件(操作系统、数据库管理系统及应用程序。)
- 人员(系统分析和数据库设计人员、应用程序员、最终用户、数据库管理员DBA。)
数据库系统DBMS的功能:
- 实现对共享数据有效地组织、管理和存取; 包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立与维护等。
5.1 三级模式-两级映像
- 内模式:管理如何存储物理的数据,对应具体物理存储文件。
- 模式:又称概念模式,就是我们通常使用的基本表,根据应用、需求将物理数据划分成一张张表。
- 外模式:对应数据库中的视图这个级别。将表进行一定的处理后再提供给用户使用。
- 外模式-模式映像:是表和视图之间的映射,存在概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序。
- 模式-内模式映像:是表和物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序。
5.2 数据库设计
- 1.需求分析:即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书。
- 2.概念结构设计:就是设计E-R图,也即实体-属性图,与物理实现无关,说明有哪些实体,实体有哪些属性。
- 3.逻辑结构设计:将E-R图,转换成关系模型,也即转换成实际的表和表中的列属性,这里要考虑很多规范化的东西。
- 4.物理设计:根据生成的表等概念,生成物理数据库。
E-R模型
- 数据模型三要素:数据结构(所研究的对象类型的集合)、数据操作(对数据库中各种对象的实例允许执行的操作的集合)、数据的约束条件(一组完整性规则的集合)。
- E-R模型:即实体-联系模型,使用椭圆表示属性、长方形表示实体、菱形表示联系,联系两端要标注联系类型(1:1;1:N,M:N)。
- 属性分类:简单属性和复合属性(属性是否可以分割)、单值属性和多值属性(属性有多个取值)、NULL属性(无意义)、派生属性(可由其他属性生成)。
关系模型
- 关系模型也即数据库中常用的表,包括实体的属性,标识出实体的主键和外键,如:
- S(
_Sno_
,Sname,SD,Sage,Sex);学生S关系模式,属性位学号、姓名、系、年龄、性别
模型转换
E-R图转换为关系模型:每个实体都对应一个关系模式;联系分三种:
- 1:1的联系中,联系可以放到任意的两端实体中,作为一个属性(要保证1:1的两端关联);
- 1:N的联系中,联系可以单独作为一个关系模式,也可以在N端中加入1端实体的主键;
- M:N的联系中,联系必须作为一个单独的关系模式,其主键是M和N端的联合主键。
关系代数运算
- 并:结果是两张表中所有的记录数的合并,相同记录只显示一次。
- 交:结果是两张表中相同的记录。
- 差:S1-S2,结果是S1表中有而S2表中没有的那些记录。
- 笛卡尔积:S1S2,产生的结构包括S1和S2的所有属性列,并且S1中每条记录以此和S2中所有记录组合成一条记录,最终属性列为S1+S2属性列,记录数为S1S2记录数。
- 投影:实际是按条件选择某关系模式中的某列,列也可以用数字表示。
- 选择:实际是按条件选择某关系模式中的某条记录。
- 自然连接:结果显示全部的属性列,但是相同属性列值显示一次,显示两个关系模式中属性相同且值相同的记录。
函数依赖
- 给定一个X,能唯一确定一个Y,就称X确定Y,或者说Y依赖于X,例如Y=X* X函数。
- 函数依赖又可扩展一下两种规则:
- 部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。
- 传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可确定C,是传递函数依赖;若A和B等价,则不存在传递,直接就可确定C。
键
- 超键:能唯一标识此表的属性的组合。
- 候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
- 主键:任选一个候选键,即可作为主键。
- 外键:其他表中的主键。
- 主属性:候选键内的属性为主属性,其他属性为非主属性。
约束
- 实体完整性约束:即主键约束,主键值不能为空,也不能重复。
- 参照完整性约束:即外键约束,外键必须是其他表中已存在的主键的值,或者为空。
- 用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到150之间。
范式
- 第一范式1NF:所有属性都不可以再分割为两个或多个分量。
- 第二范式2NF:当且仅当R是1NF,且每个非主属性完全依赖主键(不存在部分依赖)时,R就是2NF。比较典型的例子就是候选键是单属性,单属性是不可能存在部分函数依赖的。
- 第三范式3NF:当且仅当R是2NF,且R中没有非主属性传递依赖于候选键时,R就是3NF(此时,也不会存在部分依赖)。一般解决方法是拆分传递依赖的非主属性为一个新的关系模式。本质就是主键要直接决定所有非主属性,不能通过非主属性间接决定。
- BC范式BCNF:当且仅当R是3NF,且F中每个依赖的决定因素必定包含R的某个候选码。
模式分解
- 范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递函数依赖的属性分离出来,来达到一步步优化,一般分为以下两种:
- 1.保持函数依赖分解。对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。
- 2.无损分解。分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。
- 当分解为两个关系模式,除了表格法之外,还可以通过以下定理判断是否无损分解:如果R的分解为p={R1,R2},F为R所满足的函数依赖集合,分解拼具有无损连接性的充分必要条件是R1∩R2->(R1-R2)或者R1∩R2->(R2-R1)。
5.3 事务管理
- 事务提交commit,事务回滚rollback。
- 事务:由一系列操作组成,这些操作,要么全做,要么全不做,拥有四种特性,详解如下:
- 1.(操作)原子性:要么全做,要么全不做。
- 2.(数据)一致性:事务发生前后数据是一致的,例如银行转账。
- 3.(执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
- 4.(改变)持续性:事务操作的结果是持续性的。
并发控制
- 事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:
- 1.丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。
- 2.不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。
- 3.读脏数据:事务1对数据A进行了修改,事务2度数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的是无效的,读到了脏数据。
封锁协议 - X锁是排它锁(写锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的X锁。
- S锁是共享锁(读锁)。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加上S锁(也即能读不能修改),直到T释放A上的S锁。
共分为三级封锁协议,如下:
- 一级封锁协议:事务在修改数据R之前必须先对其加上X锁,直到事务结束才释放。可解决丢失更新问题。
- 二级封锁协议:一级封锁协议的基础上架上事务T在读数据R之前必须先对其加S锁,读完后即释放S锁。可解决丢失更新、读脏数据问题。
- 三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可解决丢失更新、读脏数据、数据重复读问题。
5.4 数据库安全
数据库故障
- 故障类型1:事务内部故障。故障原因:本身逻辑(可预期)、运算溢出(不可预期)。
- 故障类型2:系统故障。故障原因:系统停止运行任何事件,如操作系统故障、停电。
- 故障类型3:介质故障。故障原因:物理介质损坏,几率小破坏性最大。
- 故障类型4:计算机病毒。故障原因:人为的故障和破坏,在计算机程序中插入的破坏。
数据库备份
- 静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作;优点是非常快速、容易归档(直接物理复制操作);缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
- 动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行;优点是可在表空间或数据库文件级备份,数据库仍可使用,可达到秒级恢复;缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
- 完全备份:备份所有数据。
- 差量备份:仅备份上一次完全备份之后变化的数据。
- 增量备份:备份上一次备份之后变化的数据。
- 日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
5.5 分布式数据库
局部数据库位于不同的物理位置,使用一个全局DBMS将所有局部数据库联网管理,这就是分布式数据库。其体系结构如下图所示:
分片模式
- 水平分片:将表中水平的记录分别存放在不同的地方。
- 垂直分片:将表中垂直的列值分别存放在不同的地方。
分布透明性
- 分片透明性:用户或应用不需要知道逻辑上访问的表具体是如何分块存储的。
- 位置透明性:应用程序不关心数据存储物理位置的改变。
- 逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
- 复制透明性:用户或应用程序不关心复制的数据从何而来。
5.6 数据仓库与数据挖掘
数据仓库是一种特殊的数据库,也是按数据库形式存储数据的,但是目的不同:数据库经过长时间的运行,里面的数据会保存的越来越多,就会影响系统运行效率,对于某些程序而言,很久以前的数据并非必要的,因此,可以删除掉以减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般都将这些数据从数据库中提取出来保存到另外一个数据库中,称为数据仓库。
- 由此,可知,数据仓库的目的不是为了应用,是面向主题的,用来做数据分析,集成不同表,而且是相对稳定的,一般不会做修改,同时会在特定的时间点,做大量的插入,反映历史的变化。
- 依据上述,可以提炼出数据仓库的形成过程,如下图所示:
数据挖掘 - 由上图可知,形成数据仓库后,有两个作用,一个是用来做数据的查询、分析、生成报表。另一个是使用数据挖掘工具对这些历史数据进行挖掘,查找数据间的关系,发现剩余价值。
数据挖掘的分析方法
- 关联分析:关联分析主要用于发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。
- 序列分析:序列分析主要用于发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。
- 分类分析:分类分析通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。分类分析时首先为每个记录赋予一个标记(一组具有不同特征的类别),即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。
- 聚类分析:聚类分析是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。
商业智能
- BI系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。
- 数据预处理是整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL过程);
- 建立数据仓库是处理海量数据的基础;
- 数据分析是体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转灯数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;
- 在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
5.7 反规范化技术
由前面介绍可知,规范化操作可以预防插入异常、更新、删除异常和数据冗余,一般是通过模式分解,将表拆分,来达到这个目的。
- 但是表拆分后,解决了上述异常,却不利于查询,每次查询时,可能都要关联很多表,严重降低了查询效率,因此,有时候需要使用反规范化技术来提高查询效率。
- 技术手段包括:增加派生性冗余列、增加冗余列、重新组表、分割表。
- 主要就是增加冗余,提高查询效率,为规范化操作的逆操作。
5.8 大数据
- 特点:大量花、多样化、价值密度低、快速化。
- 大数据和传统数据的比较如下:
- 要处理大数据,一般使用集成平台,称为大数据处理系统,其特征为:高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。
5.9 SQL语言
SQL语言中的语法关键字,不区分大小写:
- 创建表:create table
- 指定主键:primary key()
- 指定外键:foreign key()
- 修改表:alter table
- 删除表:drop table
- 索引index,视图view
数据库查询select…from…where…
- 分组查询group by,分组时要注意select后的列名要适应分组,having为分组查询附加条件:select Sno,avg(score) from student group by Sno having(avg(score)>60)
- 更名运算as:select Sno as “学号” from t1
- 字符串匹配like,%匹配多个字符串,__ 匹配任意一个字符:select * from t1 where Sname like ‘a_’
- 数据库插入:insert into … values()
- 数据库删除:delete from … where
- 数据库修改:uodate … set … where
- 排序order by,默认为升序ASC,降序要加关键字DESC
- DISTINCT:过滤重复的选项,只保留一条记录
- UNION:出现在两个SQL语言之间,将两个SQL语句的查询结果取或运算,即值存在于第一句或第二句都会被选出
- INTERSECT:对两个SQL语句的查询结果做与运算,即值同时存在于两个语句才被选出
- MIN、AVG、MAX:分组查询时的聚合函数
5.10 数据库新技术
联邦数据库
- 联邦数据库系统FDBS,是一个彼此协作却又相互独立的成员数据库的集合,它将成员数据库系统按不同程度进行集成,是对该系统整体提供控制和协同操作的软件。
- 和分布式数据库的区别:FDBS仅提供对外的统一接口,内部各个成员数据库是相互独立的,而分布式数据库是数据分布在各个局部数据库内,内部实际是一个整体。
- 特征:分布性、异构性、自治性、透明性。
NoSQL
- Not-only SQL:是一种非关系型的数据库,其和关系型数据库的比较如下:
- 特点:成熟度不够,大量关键特性有待实现;开源数据库产品支持力度有限;数据挖掘与商务智能支持不足,现有的产品无法直接使用NoSQL数据库;NoSQL专家少,大部分都处于学习阶段。
- 代表:Redis、MongoDB、Flare、Oracle NoSQL DB……
内存数据库
- 内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的处理速度要快很多,一般都在10倍以上。
- 特点:工作版本常驻内存,活动事务只与实时内存数据库的内存拷贝打交道。
- 常见的内存数据库:Redis\SQLite\Mircrosoft SQL Server Compact等。
数据库的性能优化