9.1 基本概念
9.1.1 数据库与数据库系统
数据库技术:研究数据库结构、存储、设计、管理和应用的一门软件学科
数据库系统:本质上是一个用计算机存储信息的系统,采用数据库技术,有组织、动态的存储大量相关数据,方便多用户访问的计算机系统,由数据库、硬件、软件和人组成
数据库管理系统:是位于用户与操作系统之间的一层数据管理软件,其基本目标是提供一个可以方便、有效的存取数据库信息的环境,是数据库系统的核心软件,需要在操作系统的支持下工作,解决如何科学的组织和存储数据,如何高效的获取和维护数据,主要功能包括数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护
数据库:信息的集合,收集计算机数据的仓库和容器,系统用户可以操作这些数据;是统一管理的、长期存储在计算机内的、有组织的相关数据的集合,其特点是数据联系密切、冗余度小、独立性高、易扩展、并且可为各类用户共享
数据:描述事物的符号记录,具有多种表现形式,文字、图形、图像、声音和语言
信息:现实世界事务的存在方式或状态的反映,可感知、可存储、可加工、可传递和可再生,信息也是一种资源
数据库人员:系统分析员(负责应用系统的需求分析和规范说明,他们和用户及数据库管理员一起确定系统的硬件配置,并参与数据库系统的概要设计)和数据库设计人员(负责数据库中数据的确定、数据库各级模式的设计);应用程序员(负责编写使用数据库的应用程序,这些应用程序可对数据进行检索、建立、删除或修改);最终用户(应用系统的接口或利用查询语言访问数据库);数据库管理员(负责数据库的总体信息控制,决定数据库中信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,改进数据库的性能,重组和重构数据库,以提高性能)
9.1.2 数据库管理系统的功能
数据库管理系统主要实现对共享数据有效的组织、管理和存取
数据定义:DBMS提供数据定义语言,用户可以对数据库的结构进行描述,包括外模式、模式和内模式的定义,数据库的完整性定义、安全保密定义,存储于数据字典,是运行的基本依据
数据库操作:DBMS向用户提供数据操纵语言(宿主型与自含型),实现对数据库中数据的检索、插入、修改和删除
数据库运行管理:数据库在运行期间多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等
数据的组织、存储和管理:DBMS分类组织、存储和管理各类数据,包括数据字典、用户数据和存取路径等,因此要确定以何种文件结构和存取方式在存储级上组织这些数据,以提高存取效率,实现数据将的联系、数据组织和存储的基本目标是提高存储空间的利用率
数据库的建立和维护:包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构、性能检测和分析等
其他功能:网络通信、与其他数据库管理系统或文件系统的数据转换、异构数据库之间的互访和互操作能力等
9.1.3 数据库管理系统的特征及分类
特征:数据结构化且统一管理;有较高的数据独立性;数据控制功能(数据库的安全性、完整性、并发和恢复和故障恢复的控制)
分类:关系数据库系统(基于关系数据库模型,Oracle、Db2、Sybase、SQL Server、Access、MySQL )、面向对象的数据库系统(以对象形式对数据建模的DBMS)、对象关系数据库系统(传统关系模型基础上提供元组、数组、集合和处理新的数据类型操作能力的数据库)
9.1.4 数据库系统体系结构
从用户角度数据库体系结构分为集中式、分布式、C/S和并行结构;系统管理角度,数据库采用三级模式结构
集中式:数据集中、数据管理集中、所有的功能都集中在DBMS所在的计算机上
C/S结构:客户端的请求送到处理机上执行,客户端和服务端职责明确,客户端负责数据表示,主要包括图形用户界面、表格生成和报表处理等;服务端负责数据库服务,包括存取结构、查询计算和优化,并发控制以及故障恢复等;前后端通过SQL或应用程序接口;ODBC(开放式数据库互联)和JDBC(Java程序数据库连接)标准定义了应用程序和数据库服务通信的方法,即定义了应用程序接口,应用程序用它来打开与数据库的连接、发送查询和更新以及获取返回结果等;服务器一般分为事务服务器和数据服务器
并行数据库系统:多个物理上连在一起的CPU,分共享内存式多处理器(一台计算机同时有多个活动的CPU,他们共享单个内存和一个公共磁盘接口)和无共享式并行体系结构(一台计算机上同时有多个活动的CPU,并且他们都有自己的内存和磁盘)
分布式数据库系统:包括物理上分布、逻辑上集中的分布式数据库结构和物理上分布、逻辑上分布的分布式数据库结构
9.1.5 数据库的三级模式结构
数据库产品很多,支持不同的数据模型,使用不同的数据库语言,建立在不同的操作系统尚,数据的存储结构也各不相同,但体系结构都具有同样的特征,采用“三级模式和两级映像”;数据库有型(数据的结构和属性)和值(型的一个具体赋值)的概念;数据库设计员可以在视图层、逻辑层和物理层对数据进行抽象,通过外模式、概念模式和内模式来描述不同层次上的数据特征
概念模式:是数据库中全部数据的逻辑结构和特征的描述,由若干个概念记录类型组成,只涉及型的描述,不涉及具体值;概念模式的具体值为模式的一个实例,同一个模式可以有多个实例,其反映数据库的结构及其联系,相对稳定,实例反映数据库的某一时刻的状态,相对变动;不仅需要描述概念记录类型,还要描述记录间的联系、操作以及数据的完整性和安全性等要求
外模式:用户模式或子模式,使用户与数据库系统的接口,是用户用到的那部分数据的描述,由若干外部记录类型组成,用户使用操纵语言对数据库进行操作,实际上是对外模式的外部记录进行操作,程序员不必关心概念模式,只与外模式发生联系,按外模式的结构存储和操作数据
内模式:存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表现方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节
数据按照外模式的描述提供给用户,按照内模式的描述存储在磁盘,概念模式提供了连接这两级模式的相对稳定的中间层,使得两级中任何一级的变化都不收另一个影响
两级映像:模式/内模式映像;外模式/模式映像
9.1.6 大数据
大数据:无法用现有的软件工具提取、存储、搜索、共享、分析和处理的海量的、复杂的数据集合;具有大量化、多样化、价值密度低和快速化的特点
需要研究和解决的问题:高并发数据存取的性能要求及数据存储的横向扩展问题,目前多从架构和并行等方面考虑解决;实现大数据资源化、知识化、普适化的问题,解决关键在与对非结构化数据的内容理解;非结构化海量信息的智能化处理问题,主要解决自然语言理解、多媒体内容理解、机器学习的问题
大数据时代面临的挑战:软件和数据处理能力、资源和共享管理以及数据处理的可信力
大数据产生的安全风险:大数据成为网络攻击的显著目标;大数据加大了隐私泄露风险;大数据威胁现有的存储和安防措施;大数据技术成为黑客的攻击手段;大数据成为高级可持续攻击的载体;大数据为信息安全提供新支撑
9.2 数据模型
9.2.1 基本概念
数据模型是对显示世界数据特征的抽象;
概念数据模型:是按用户的观点对数据数据和信息建模,强调语义表达功能,易于用户理解,主要用于数据库设计。E_R模型
基本数据模型:按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于DBMS的实现,有层次模型、网状模型、关系模型和面向对象模型
9.2.2 数据库模型的三要素
数据库结构的基础是数据模型,用来描述数据的一组概念和定义,其三要素为,数据结构(所研究对象的类型集合,是系统静态特征的描述)、数据操作(是对数据库中各种对象的实例允许执行的操作集合,包括操作及操作规则,是对系统动态特征的描述)和数据的约束条件(是一组完整性规则的集合,对于具体的应用数据必须遵循特定的语义约束条件,以确保数据的正确有效和相容)
9.2.3 E-R模型
E-R模型:用E-R图来描述现实世界的概念模型,是用户与数据库设计人员交流的语言,只能说明实体间的语义联系,还不能详细的说明数据结构,实际中,一般先设计E-R模型,然后将其转换成计算机能接受的数据模型
实体:是现实世界中可以区别于其他对象的事件或物体,图中用矩形框表示,每个实体由一组特性来表示,其中部分属性可以唯一标识实体,实体集是具有相同属性的实体集合
联系:图中用菱形表示,分为实体内部的联系(反映数据在同一记录内部各字段间的联系)和实体之间的联系(1:1/1:n/m:n)
属性:是实体某方面的特性,有取值范围,分为简单属性和符合属性、单值属性和多值属性、NULL属性、派生属性
实体-联系方法:直接从现实世界中抽象出实体和实体间的联系,然后用支管的E-R图来表示数据模型
弱实体:必须依赖其他实体存在的实体,如家属是依赖职工存在的
特殊化:实体中有各自特征,将这种从普通到特殊的过程
普遍化:将多个具有共同特性的实体集概括成一个更普遍的实体集即为普遍化
9.2.4 数据模型
数据库中常见的数据模型有层次模型(利用树状结构表示数据与数据之间的联系)、网状模型(一种特殊的层次模型,允许节点之间有多种联系)、关系模型(用表格表达实体集以及实体集之间的联系)和面向对象模型(以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点)
9.2.5 关系模型
关系模型:用表格结构表达实体集以及实体集之间的联系,由若干个关系模式组成的集合,一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念,关系是实例,也是一张表,对应于程序设计语言中变量的概念
9.3 关系代数
9.3.1 关系数据库的基本概念
属性和域:属性用于描述一个事物若干特征;属性的取值范围对应的值的集合叫做域
笛卡尔积与关系:笛卡尔积是多个集合循环相乘,笛卡尔积的子集称为集合上的关系
目或度:R(D1,D2...Dn),R表示关系的名称,n表示关系的目或度
候选码:某一属性或属性组的值能唯一标识一个元组,即为候选码
主码:多个候选码中选一个 即为主码
主属性:包含在任何候选码中的主属性即为主属性
外码:R中的属性不是该关系的码,但是是其他关系的码,即为码
全码:所有属性组是这个关系模式的候选码,即为全码
关系的三种类型:基本关系(基本表,实际存储数据的逻辑表示);查询表(查询结果对应的表);视图表(由基本表或其他视图表导出的表,不独立存储于数据库中)
关系的描述称为关系模式,表示为R(U,D,dom,F),U表示属性名集合,D是属性的域,dom是属性向域的映像集合,F是属性间数据的依赖关系集合
完整性约束:提供了一种手段 来保护当授权用户对数据库做修改时不会破坏数据的一致性,防止对数据的意外破坏,分为实体完整性(规定关系的主属性不能为空)、参照完整性(某一个关系的外码,或者其取,或者为其他关系的主码)和用户自定义完整性(针对某一具体关系数据库的约束条件,反映某具体应用所涉及的数据必须满足的语义要求)
关系代数运算符分4类,集合运算符、专门的关系运算符、算术运算符和逻辑运算符
9.3.2 5种基本的关系代数运算
并:R和S关系模式相同,RUS,属于R或属于S
差:R和S关系模式相同,R-S,属于R但不属于S
笛卡尔积:是一个n+m列的元组集合, RXS
投影:从关系的垂直方向进行运算,从R中选出若干列A组成新的关系
选择:从关系的水平方向进行运算,从关系R汇总选择满足给定条件的诸元组
9.3.3 扩展的关系代数运算
交:R和S具有相同的关系模式,RnS,即属于R与属于S的元组
连接:是从两个关系R和S的笛卡尔积中选择满足条件的元组
除:同时从关系的垂直和水平方向进行运算
广义投影:允许在投影表中使用算术运算
外连接:是连接运算的扩展,可以处理由于连接运算而缺失的信息,有左连接、右连接和全外连接
9.4 关系数据库SQL语言简介
SQL:是关系数据库中最普遍使用的语言,包括数据查询、操纵、定义和控制功能,是一种通用的、功能强大的关系数据库的标准语言
9.4.1 SQL数据库体系结构
特点:综合统一、高度非过程化、面向集合的操作方式、两种使用方式、语言简洁
数据查询(SELECT)/数据定义(CREATE/DROP/ALTER)/数据操纵(INSERT/UPDATE/DELETE)/数据控制(GRANT/EVORK)
SQL语言支持关系数据库的三级模式结构,视图对应外模式、基本表对应模式、存储文件对应内模式
9.4.2 SQL的基本组成
组成:数据定义语言、交互式数据操纵语言、事务控制、嵌入式SQL和动态SQL、完整性和权限管理
9.4.3 SQL数据定义
基本表和视图都是表,基本表是实际存储在数据库中的表,视图是虚表,从基本表或其他视图导出的表;数据库中只存放视图的定义,不存放视图的数据,可以用SQL语言对基本表和视图进行查询等操作;一个基本表可以存储在一个或多个存储文件中,一个存储文件可以存储一个或多个基本表,一个表可以带若干索引,索引也存储在存储文件中,每个存储文件就是外部存储器上的一个物理文件,存储文件的逻辑结构组成了关系数据库的内模式
SQL的数据定义包括对表、视图、索引的创建和删除
创建表:CREATE TABLE 表名(列名 数据类型 列级完整性约束条件,......)、列级完整性约束条件有NULL 和 UNIQUE
修改删除表:ALTER TABLE 表名 [ADD 新列名 数据类型 完整性约束]...
[DROP 完整性约束名]
[MODIFY 列名 数据类型]
DROP TABLE 表名
索引建立与删除:数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单;通过创建唯一索引,可以保证数据记录的唯一性;可以大大加快数据的检索速度;可以加速表与表之间的连接;在使用ORDER BY 和GROUP BY子局中进行检索数据时,可以显著减少查询中分组和排序的时间;使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能
CREATE [UNIQUE][CLUSTER] INDEX 索引名 ON 表名 (列名 次序 列名 次序)
DROP INDEX 索引名
视图创建与删除:视图是一个或多个基本表或视图中导出的表,其结构和数据是建立在对表的查询基础上的;使用视图可以使用视图集中数据、简化和定制不同用户对数据库的不同数据要求;可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便的使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中;可以使用用户只关心他感兴趣的某种特定数据和他们所负责的特定任务,而哪些不需要的或者无用的数据则不在视图中显示;大大简化了用户对数据的操作;可以让不同的用户以不同的方式看到不同或者相同的数据集;在某种情况下,由于表中数据量太大,设计时时常将表进行水平或垂直分割,以免边的二结构变化对应用程序产生不良影响;视图提供了一个简单而有效的安全机制
CREATE VIEW 视图名 列表名 AS SELECT 查询子句 [WITH CHECK OPTION]
DROP VIEW 视图名
9.4.4 SQL数据查询
SELECT [ALL|DISTINCT] 目标列表达式....FROM 表名或视图名...WHERE 条件表达式
GROUP BY 列名 HAVING 条件表达式 ORDER BY 列名 ASC|DSC
查询子句的顺序为SELECT/FROM/WHERE/GROUP BY/HAVING和ORDER BY 其中SELECT和FROM是必须的,HAVING 条件子句只能与GROUP BY 搭配使用
SELECT 子句对应的是关系代数中的投影运算,用来列出查询结果中的属性,可以是列名、表达式、集函数,DISTINCT选项可以保证查询的结果集中不存在重复元组
FROM 子句对应的是关系代数中的笛卡尔积,列出表达式求值过程中需扫描的关系
WHERE 子句对应的是关系代数中的选择谓词
聚集函数
GROUP BY:对元组进行分组,后面跟一个分组属性列表,利用HAVING 子句对分组按照一定的条件进行限制
AS 子句用于更名 旧名 AS 新名
字符串操作:最常用的使用LIKE的模式匹配,%代表匹配任意字符串,_匹配任意一个字符
视图的查询:与基本表一致
9.4.5 SQL数据更新
插入:INSERT INTO 基本表名 字段名 VALUES(常量) ;查询语句
INSERT INTO 基本表名 (列表名)SELECT 查询语句
删除:DELETE FROM 基本表名 WHERE 表达式
修改:UPDATE 基本表名 SET 列名=值表达式... WHERE 条件表达式
9.4.6 SQL访问控制
数据访问控制的是用户对数据的存储权利,由数据管理员决定,但某用户对某数据具有何种权利是管理问题,而不是技术问题,数据库管理系统就是保证这些决定的执行;具备通过GRANT 和REVOKE 将授权通知系统并存入数据字典、当用户提出请示时,根据授权情况检查是否执行操作请求的功能
SQL 标准包括DELETE/INSERT/SELECT和UPDATE权限,还包括REFERENCES权限
授权语句:GRANT 权限...ON 对象类型 对象名 TO 用户...WITH GRANT OPTION
收回权限语句格式:REVOKE 权限......ON 对象类型 对象名 FROM 用户......
9.4.7 嵌入式SQL
SQL 提供了将SQL语句嵌入到某种高级语言中的使用方式,通常采用预编译的方法识别嵌入到高级语言中的语句,关键问题在于必须区分主语言中嵌入的语句以及主语言与语句将的通信问题,利用加前缀EXEC SQL 的方式,结束标志视主语言而定
嵌入式SQL与主语言之间的通信方式:SQL通信区向主语言传递SQL语句执行的状态信息,使主语言能够根据此信息控制程序流程;主变量也成共享变量,主语言想SQL语句提供参数主要通过主变量,主变量由主语句的程序定义,并用SQL的DECLARE语句说明,在引用时,为了与SQL属性名相区别,需要在主变量钱加:;游标SQL语言是面向集合的,一条SQL语言可产生或处理多条记录,而主语言是面向记录的,一组主变量一次智能放一条记录,所以,引入游标,通过移动游标指针来决定获取那一条记录
9.5 关系数据库的规范化
关系数据库设计的核心是数据间的函数依赖,衡量标准是关系规范化的程度及分解的无损连接和保持函数依赖性,关系数据设计的目标是生成一组合适的性能良好的关系模式,以减少系统中信息存储的冗余度,并可方便的获取信息
9.5.1 函数依赖
数据依赖:通过一个关系中属性间值的相等与否来体现出来的数据间的相互关系,是现实世界属性间联系和约束的抽象,是数据内在的性质,是语义的体现;函数依赖是一种最重要、最基本的数据依赖
9.5.2 规范化
关系数据库设计的方法之一就是设计满足适当方式的模式,通过通过判断分解后的模式达到几范式来评价模式规范化的程度,1-5,1最低,可以将第一级范式的关系模式转换成若干个高一级的关系范式,即为规范化
1NF:若关系模式R中的每一个分量都是不可再分的数据项,则属于1NF;第一范式,冗余度大、引起修改操作的不一致性、插入异常、删除异常
2NF:若关系模式R∈1NF,且每一个非主属性完全依赖于码,则属于2NF;
3NF:若关系模式R(U,F)中不存在这样的码X,属性组Y及非属性组Z使得X->Y,则Y->Z成立
产生冗余和异常的两个重要原因是部分依赖和传递依赖,因为3NF模式中不存在非主属性对码的部分函数依赖和传递函数依赖,所以具有较好的性能,通常将1NF和2NF的关系模式转换成3NF或更高级别的范式
9.5.3 模式分解及分解应具有的特性
分解:对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有3种情况具有无损连接性、保持函数依赖、既要无损连接也要保持函数依赖
9.6 数据库的控制功能
9.6.1 事务管理
事务:是一个操作序列,这些操作要么都做,要么都不做,是数据库环境汇总不可分割的逻辑工作单位,一个程序可以包含多个事务
定义事务的语句有三条:事务开始---事务提交---事务回滚
事务的特征:原子性、一致性、隔离性和持久性
9.6.2 数据库的备份与恢复
计算机系统出现故障,使数据库中的全部或部分数据丢失,因此数据库的关键技术在与监理冗余数据,如何在系统出现故障后能够及时的使数据库恢复到故障前的正确状态,就是数据库恢复技术
故障类型:事务内部故障、系统故障、介质故障及计算机病毒
备份方法:恢复的基本原理就是建立数据冗余,方法主要有进行数据存储和登记日志文件,数据的存储分为静态转储和动态转储、海量转储和增量转储、日志文件
恢复:事务恢复3步骤,反向扫描文件日志,查找该事物的更新操作;对事务的更新操作进行逆操作,继续反向扫描日志文件,查找该事务的其他更新,并做同样的处理,直到事务的开始标志
数据库镜像:通过复制数据实现,实际应用中往往对关键的数据和日志文件镜像
9.6.3 并发控制
并发操作:对用户共享的系统中许多用户可能同时对同一数据进行操作;带来的问题是数据的不一致性,丢失更新、不可重复读和读脏数据;主要原因是事务的并发操作破坏了事务的隔离性,DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户获得不正确的数据
并发控制技术:封锁(排他封锁X锁(只允许一个事物读写数据,其他事物不能对数据进行操作)和共享锁S锁(只允许事物读,不允许写))
三级封锁协议:一级加X锁;二级在一级基础上,读数据时加入S锁;三级在一级基础上,读数据时加S锁
活锁和死锁:活锁指可能永远等待的情况;死锁指分别锁定了别人的数据,导致无法运行
并发调度的可串行性:多个事务并发执行,当且仅当其结果与某一次序串行的执行他们时结果相同;即为可串行化的调度;可串行性是并发事务正确性的准则
两段封锁协议:所有事务必须分两个阶段对数据项进行加锁和解锁,第一阶段只获得封锁,第二阶段是释放封锁
封锁的粒度:封锁对象的大小称为封锁的粒度,可以是逻辑单元,如属性、元组、关系、索引项、整个索引甚至整个数据库,也可以是物理单元,如数据页或索引页